Rumah pembangunan bahagian belakang Tutorial Python 基于opencv实现简单画板功能详解

基于opencv实现简单画板功能详解

Aug 07, 2020 pm 03:51 PM
opencv papan lukisan

基于opencv实现简单画板功能详解

OpenCV提供了很多简单的语句,实现复杂的功能,根据颜色和鼠标交互的基础语句,我们可以建立一个简单的画板。尽管它简单,但是制作的框架步骤不能少。

如果您感兴趣,可以按照我的步骤写一下,或者直接复制总程序中的代码运行。

相关学习推荐:python视频教程

一、功能

明确画板功能,便于后续编写程序。
目标功能:可调节颜色,有画图区域,可以进行鼠标输入。

二、框架搭建

主要有两步:

第一步:建立颜色选区,可以用OpenCV的滑动条语句cv.createTrackbar设置。cv.createTrackbar一共拥有五个参数设置,它们是(Trackbar名称,目标窗口名称,起始值-同时也是默认值,最大值,回调函数)。

#创建画布
img=np.zeros((300,512,3),np.uint8)
#给画布命名——需要提供给Trackbar
cv.namedWindow("image")
#创建RGB三种颜色的Trackbar,返回函数不需要做任何动作
cv.createTrackbar("R","image",0,255,nothing)
cv.createTrackbar("G","image",0,255,nothing)
cv.createTrackbar("B","image",0,255,nothing)
#由于OpenCv里面无按钮函数,所以用0/1来表示开关
switch="0:OFF\n1:ON"
cv.createTrackbar(switch,"image",0,1,nothing)
#回调函数,不需要做任何操作
def nothing(x):
 pass
Salin selepas log masuk

第二步:捕捉鼠标动作状态,根据鼠标动作,实现在画图区域画出图形。常见的鼠标操作语句,可以使用语句*events = [i for i in dir(cv) if ‘EVENT' in i]*在python内查看。

#设置一个是否开始画画的开关
drawing=False
#定义画画函数
def draw(event,x,y,flag,param):
 #将画画开关作为全局变量,以便于在每次动作以后改变它的值
 global drawing
 #使用函数cv.EVENT_LBUTTONDOWN,如果鼠标左键按下,画圆,同时drawing为真
 if event==cv.EVENT_LBUTTONDOWN:
  cv.circle(img,(x,y),3,(g,b,r),-1)
  drawing=True
 #如果鼠标移动,进行下面操作
 elif event==cv.EVENT_MOUSEMOVE:
  #如果drawing为真,开始画圆
  if drawing==True:
   cv.circle(img, (x, y), 3, (g, b, r), -1)
 #如果鼠标左键抬起,画最后一个圆,并将drawing设为False,此时就会停止画画
 elif event==cv.EVENT_LBUTTONUP:
  cv.circle(img,(x,y),3,(g,b,r),-1)
  drawing=False
Salin selepas log masuk

三、主函数

主函数就是对上述两部分进行整合。

while(1):
 #展示画布
 cv.imshow("image",img)
 #设置终止按钮,为了保证在32/64位系统或者在不是ASCII编码的键盘上有正常的操作,使用&0xFF取低八位
 k=cv.waitKey(1)&0xFF
 #如果k为27,即键盘上Esc的ASCII编码序号,退出画板
 if k==27:
  break
 #获取每个Trackbar中的值
 r=cv.getTrackbarPos("R","image")
 g = cv.getTrackbarPos("G", "image")
 b = cv.getTrackbarPos("B", "image")
 s = cv.getTrackbarPos(switch, "image")
 #如果开关是0,清空画板并禁止画画,如果是1,则允许
 if s==0:
  img[:]=0
 else:
  cv.setMouseCallback("image", draw)
#最后不要忘记销毁窗口
cv.destroyAllWindows()
Salin selepas log masuk

四、运行效果

五、总结

从这个简单的画板,我们主要学习运用了鼠标函数cv.setMouseCallback,还有cv.createTrackbar这两个基本的OpenCV函数,并探索了其中的细节,找到了其中需要注意的地方。

六、总程序

import cv2 as cv
import numpy as np

def nothing(x):
 pass
img=np.zeros((300,512,3),np.uint8)
cv.namedWindow("image")
cv.createTrackbar("R","image",0,255,nothing)
cv.createTrackbar("G","image",0,255,nothing)
cv.createTrackbar("B","image",0,255,nothing)
switch="0:OFF\n1:ON"
cv.createTrackbar(switch,"image",0,1,nothing)

drawing=False
def draw(event,x,y,flag,param):
 global drawing
 if event==cv.EVENT_LBUTTONDOWN:
  cv.circle(img,(x,y),3,(g,b,r),-1)
  drawing=True
 elif event==cv.EVENT_MOUSEMOVE:
  if drawing==True:
   cv.circle(img, (x, y), 3, (g, b, r), -1)
 elif event==cv.EVENT_LBUTTONUP:
  cv.circle(img,(x,y),3,(g,b,r),-1)
  drawing=False

while(1):
 cv.imshow("image",img)
 k=cv.waitKey(1)&0xFF
 if k==27:
  break
 r=cv.getTrackbarPos("R","image")
 g = cv.getTrackbarPos("G", "image")
 b = cv.getTrackbarPos("B", "image")
 s = cv.getTrackbarPos(switch, "image")
 if s==0:
  img[:]=0
 else:
  cv.setMouseCallback("image", draw)
cv.destroyAllWindows()
Salin selepas log masuk

Atas ialah kandungan terperinci 基于opencv实现简单画板功能详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pasang panduan kajian OpenCV dengan pantas menggunakan pengurus pakej pip Pasang panduan kajian OpenCV dengan pantas menggunakan pengurus pakej pip Jan 18, 2024 am 09:55 AM

Gunakan arahan pip untuk memasang tutorial OpenCV dengan mudah, yang memerlukan contoh kod khusus OpenCV (OpenSource Computer Vision Library) ialah perpustakaan penglihatan komputer sumber terbuka Ia mengandungi sejumlah besar algoritma dan fungsi penglihatan komputer, yang boleh membantu pemaju membina imej dan aplikasi berkaitan pemprosesan video. Sebelum menggunakan OpenCV, kita perlu memasangnya terlebih dahulu. Nasib baik, Python menyediakan pip alat yang berkuasa untuk mengurus perpustakaan pihak ketiga

python analisis contoh piramid imej OpenCV python analisis contoh piramid imej OpenCV May 11, 2023 pm 08:40 PM

1. Asas teori piramid imej Piramid imej ialah sejenis ekspresi berskala imej Ia adalah struktur yang berkesan tetapi secara konseptual untuk menerangkan imej pada pelbagai resolusi. Piramid imej ialah koleksi imej dengan peleraian yang semakin rendah yang disusun dalam bentuk piramid dan diperoleh daripada imej asal yang sama. Ia diperoleh melalui persampelan ladder down, dan persampelan tidak dihentikan sehingga syarat penamatan tertentu dicapai. Kami membandingkan imej lapisan demi lapisan kepada piramid Semakin tinggi tahap, semakin kecil imej dan semakin rendah resolusi. Jadi mengapa kita membuat piramid imej? Ini kerana menukar saiz piksel kadang-kadang tidak mengubah ciri-cirinya Sebagai contoh, jika saya menunjukkan kepada anda gambar 10 juta piksel, anda boleh tahu bahawa ada orang di dalamnya Jika saya tunjukkan gambar 100,000 piksel, anda boleh juga tahu bahawa ada orang di dalamnya Tetapi bertentangan dengan rancangan itu

Tutorial pemasangan OpenCV: mesti dilihat untuk pengguna PyCharm Tutorial pemasangan OpenCV: mesti dilihat untuk pengguna PyCharm Feb 22, 2024 pm 09:21 PM

OpenCV ialah perpustakaan sumber terbuka untuk penglihatan komputer dan pemprosesan imej, yang digunakan secara meluas dalam pembelajaran mesin, pengecaman imej, pemprosesan video dan bidang lain. Apabila membangun menggunakan OpenCV, untuk menyahpepijat dan menjalankan program dengan lebih baik, ramai pembangun memilih untuk menggunakan PyCharm, persekitaran pembangunan bersepadu Python yang berkuasa. Artikel ini akan memberikan pengguna PyCharm tutorial pemasangan untuk OpenCV, dengan contoh kod khusus. Langkah Pertama: Pasang Python Pertama, pastikan anda telah memasang Python

Cara menggunakan Python+OpenCV untuk mencapai kesan menyeret petak maya Cara menggunakan Python+OpenCV untuk mencapai kesan menyeret petak maya May 15, 2023 pm 07:22 PM

1. Kesan projek 2. Proses teras 1. openCV membaca aliran video dan melukis segi empat tepat pada setiap bingkai gambar. 2. Gunakan paip media untuk mendapatkan koordinat titik kekunci jari. 3. Berdasarkan kedudukan koordinat jari dan kedudukan koordinat segi empat tepat, tentukan sama ada titik jari berada pada segi empat tepat, segi empat tepat akan mengikut pergerakan jari. 3. Penyediaan persekitaran proses kod: python:3.8.8opencv:4.2.0.32mediapipe:0.8.10.1 Nota: 1. Jika versi opencv terlalu tinggi atau terlalu rendah, beberapa masalah mungkin berlaku, seperti kamera tidak boleh dibuka, ranap , dsb. Versi python mempengaruhi versi pilihan opencv. 2. pipinstallmediapipe boleh menyebabkan op

Bagaimana untuk melukis garisan dengan anak panah dalam OpenCV menggunakan Java? Bagaimana untuk melukis garisan dengan anak panah dalam OpenCV menggunakan Java? Aug 20, 2023 pm 02:41 PM

Pakej org.opencv.imgproc pustaka JavaOpenCV mengandungi kelas yang dipanggil Imgproc yang menyediakan pelbagai kaedah untuk memproses imej input. Ia menyediakan satu set kaedah untuk melukis bentuk geometri pada imej. Untuk melukis garisan anak panah, anda perlu memanggil kaedah arrowedLine() kelas ini. Kaedah ini menerima parameter berikut: objek Mat yang mewakili imej di mana garisan akan dilukis. Objek titik mewakili dua titik antara garisan. dilukis. Objek skalar yang mewakili warna garisan. (BGR) Integer yang mewakili ketebalan garisan (lalai: 1). Contoh importorg.opencv.core.Core;importo

Bagaimana untuk melaksanakan pemprosesan video menggunakan perpustakaan PHP dan OpenCV? Bagaimana untuk melaksanakan pemprosesan video menggunakan perpustakaan PHP dan OpenCV? Jul 17, 2023 pm 09:13 PM

Bagaimana untuk melaksanakan pemprosesan video menggunakan perpustakaan PHP dan OpenCV? Abstrak: Pemprosesan video telah menjadi teknologi penting dalam aplikasi sains dan teknologi moden. Artikel ini akan memperkenalkan cara menggunakan bahasa pengaturcaraan PHP yang digabungkan dengan perpustakaan OpenCV untuk melaksanakan beberapa fungsi pemprosesan video asas, dan melampirkan contoh kod yang sepadan. Kata kunci: PHP, OpenCV, pemprosesan video, contoh kod Pengenalan: Dengan perkembangan Internet dan populariti telefon pintar, kandungan video telah menjadi bahagian yang amat diperlukan dalam kehidupan orang ramai. Walau bagaimanapun, untuk mencapai penyuntingan video dan

Dalam Python, imej boleh dibahagikan dan diekstrak menggunakan kaedah daripada perpustakaan OpenCV. Dalam Python, imej boleh dibahagikan dan diekstrak menggunakan kaedah daripada perpustakaan OpenCV. May 08, 2023 pm 10:55 PM

Pembahagian dan pengekstrakan imej: Objek latar depan dibahagikan atau diekstrak daripada imej sebagai imej sasaran. Latar belakang itu sendiri tidak berminat Algoritma aliran air dan segmen algoritma GrabCut dan mengekstrak imej. Gunakan algoritma aliran air untuk mencapai pembahagian dan pengekstrakan imej Algoritma aliran air membandingkan imej dengan permukaan rupa bumi geografi untuk mencapai pembahagian imej ini sangat berkesan. Prinsip Algoritma Mana-mana imej skala kelabu boleh dianggap sebagai permukaan rupa bumi geografi Kawasan dengan nilai skala kelabu yang tinggi boleh dilihat sebagai puncak gunung, dan kawasan dengan nilai skala kelabu yang rendah boleh dilihat sebagai lembah. Imej di sebelah kiri ialah imej asal, dan imej di sebelah kanan ialah "permukaan topografi" yang sepadan. Proses ini memisahkan imej kepada dua set berbeza: lembangan tadahan dan garisan tadahan air. Empangan yang kami bina adalah garisan air, iaitu imej asal

Pemula sila baca: Tutorial terperinci tentang cara memasang OpenCV dalam PyCharm Pemula sila baca: Tutorial terperinci tentang cara memasang OpenCV dalam PyCharm Feb 26, 2024 pm 03:24 PM

PyCharm ialah persekitaran pembangunan bersepadu (IDE) Python yang kuat dibangunkan oleh JetBrains Ia menyediakan pelbagai fungsi dan alatan untuk membantu pembangun Python menulis kod, program nyahpepijat dan mengurus projek. Menggunakan OpenCV, perpustakaan penglihatan komputer yang berkuasa, dalam PyCharm, anda boleh melakukan pemprosesan imej, pemprosesan video dan tugas lain dengan mudah. Artikel ini akan memperincikan langkah untuk memasang dan mengkonfigurasi OpenCV dalam PyCharm dan memberikan contoh kod khusus. 1.An

See all articles