opencv鼠标操作
上一讲我说要结合pyqt是因为我以为opencv没有鼠标操作,但是想想就不太可能,因为前面都用过滑条了嘛,那么我随便找了一下,opencv本身就有鼠标事件,不需要在借助pyqt了。
我们重点要学习一个函数,就是setMouseCallback。参考了https://blog.csdn.net/akadiao/article/details/80312254
和https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_mouse_handling/py_mouse_handling.html
opencv里面用的都是回调函数直接写在事件的函数参数里面了,而pyqt是先要发一个信号,然后connect到某一个函数。不过相同点是都会自动传一些参数过去,setMouseCallback传过去的参数有x,y(这个应该是一个像素作为单位的吧),有事件的类型,flags是一些事件标志,param就是上面输入参数的那个param,默认是None。
代码里面比较重要的是ix,iy要用全局变量,这是因为鼠标按下要进一次函数,松开还有再进一次,而函数里面的不加特殊声明的话都是局部变量,局部变量在每一次函数调用结束都要释放空间。所以要声明为全局变量。注意一定不能是waitKey(0),因为这样永远都不会刷新图片了。
我们就先来复现一下:参数得是一个不少才行
这个过程是在矩形的一个角按住鼠标,然后不松开,直到另一个对角,才松开,于是一个矩形就出来了。里面用到了一个画矩形的命令,img就是要在这个图片上显示,也就是这个结果是影响了img的像素的值的,pt1和pt2是对角线上的两点,color就是颜色,是BGR格式的,thickness就是线宽了。这个程序要按esc才能退出。如果线宽是负整数(线宽是小数会报错的)那么就会填充内部,这个下一个例子正好是。不过让我觉得不可思议的是