about

本文参考了:

不用鼠标交互,手动设参

先来个热身运动的先,直接手动设参选择。一个要点就是把一个RGB图片看成一个3维的数组。

import cv2

def main():

org = cv2.imread('lena.jpg')

cv2.imshow('image', org) #origin picture

cv2.waitKey(0)

roi = org[20:, 100:]

cv2.imshow('roi', roi) #region of interesting

cv2.waitKey(0)

if __name__ == '__main__':

main()

运行结果

Origin图片

lena.jpg

roi图片

roi.jpg

之前网上找的话,有什么说用cv2.cv的方法

>>>import cv2.cv as cv

error: No module named 'cv'

导入失败原因,有网友说:

OpenCV 3.0.0 does not have the cv2.cv module anymore.

我安装了OpenCV 3.1.0的,所以导入失败了。

坐标,numpy数组是采用左上角为坐标原点的方法:访问方法

img[point_y: point_y+height, point_x: point_x+width]

预备知识

OpenCV画矩形

实例点这里

用到函数:

cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → img

简单参数说明,详见官网:

img – Image.

pt1 – Vertex of the rectangle.

pt2 – Vertex of the rectangle opposite to pt1.

color – Rectangle color or brightness (grayscale image).

thickness – Thickness of lines that make up the rectangle.

OpenCV画圆形

实例点这里

用到函数

cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) →img

详见官网, 简单参数说明:

img – Image where the circle is drawn.

center – Center of the circle.

radius – Radius of the circle.

color – Circle color.

thickness – Thickness of the circle outline, if positive. Negative thickness means that a filled circle is to be drawn.

OpenCV 复制图像

实例点 这里

用到函数

img2 = img.copy()

OpenCV画文本

用到函数

cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) → None

详见官网, 参数简要说明:

img – Image.

text – Text string to be drawn.

org – Bottom-left corner of the text string in the image.

fontScale – Font scale factor that is multiplied by the font-specific base size.

color – Text color.

thickness – Thickness of the lines used to draw a text.

鼠标交互切割矩形

接下来,就是本文重点了。先吐个槽,网上有资源,但搜到的都是C++的。本来有点气馁的,还好,有官网在,文档写得很清楚,而且接口函数名字变化不大,稍微做下修改就行了。

代码实现

import cv2

global img

global point1, point2

def on_mouse(event, x, y, flags, param):

global img, point1, point2

img2 = img.copy()

if event == cv2.EVENT_LBUTTONDOWN: #左键点击

point1 = (x,y)

cv2.circle(img2, point1, 10, (0,255,0), 5)

cv2.imshow('image', img2)

elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON): #按住左键拖曳

cv2.rectangle(img2, point1, (x,y), (255,0,0), 5)

cv2.imshow('image', img2)

elif event == cv2.EVENT_LBUTTONUP: #左键释放

point2 = (x,y)

cv2.rectangle(img2, point1, point2, (0,0,255), 5)

cv2.imshow('image', img2)

min_x = min(point1[0],point2[0])

min_y = min(point1[1],point2[1])

width = abs(point1[0] - point2[0])

height = abs(point1[1] -point2[1])

cut_img = img[min_y:min_y+height, min_x:min_x+width]

cv2.imwrite('lena3.jpg', cut_img)

def main():

global img

img = cv2.imread('lena.jpg')

cv2.namedWindow('image')

cv2.setMouseCallback('image', on_mouse)

cv2.imshow('image', img)

cv2.waitKey(0)

if __name__ == '__main__':

main()

实现效果:当按住左键不放且不动时,就会出现个绿圈在图片上,当按住左键拖曳鼠标时,就会画出个蓝色矩形,最后当释放鼠标时,则出现个红色的选定框.最后最后再随意按一个键盘键,就会结束程序。

运行结果

原图:

lena.jpg

运行交互:

lena_mouse

结果截图:

lena_cut

鼠标响应参数:

event

define CV_EVENT_MOUSEMOVE 0 滑动

define CV_EVENT_LBUTTONDOWN 1 击键点击

define CV_EVENT_RBUTTONDOWN 2 右键点击

define CV_EVENT_MBUTTONDOWN 3 中间点击

define CV_EVENT_LBUTTONUP 4 左键释放

define CV_EVENT_RBUTTONUP 5 右键释放

define CV_EVENT_MBUTTONUP 6 中间释放

define CV_EVENT_LBUTTONDBLCLK 7 左键双击

define CV_EVENT_RBUTTONDBLCLK 8 右键双击

define CV_EVENT_MBUTTONDBLCLK 9 中间释放

flags

define CV_EVENT_FLAG_LBUTTON 1 左键拖拽

define CV_EVENT_FLAG_RBUTTON 2 右键拖拽

define CV_EVENT_FLAG_MBUTTON 4 中间拖拽

define CV_EVENT_FLAG_CTRLKEY 8 (8~15)按Ctrl不放事件

define CV_EVENT_FLAG_SHIFTKEY 16 (16~31)按Shift不放事件

define CV_EVENT_FLAG_ALTKEY 32 (32~39)按Alt不放事件(后面8-39还有待研究)

python opencv 截取矩形区域_python+OpenCV 鼠标交互图片切割矩形区域相关推荐

  1. python tkinter获取屏幕大小_Python使用鼠标滚轮调整tkinter应用程序窗口大小

    图书推荐:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情:用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系统等配套 ...

  2. python字符串截取split 失败_python如何截断字符串

    字符串本质上就是由多个字符组成的,Python 允许通过索引来操作字符,比如获取指定索引处的字符,获取指定字符在字符串中的位置 等.python中截取字符串,可以使用split()方法,或者使用索引来 ...

  3. python二值化 感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法

    方法一:使用轮廓 步骤1 """src为原图""" ROI = np.zeros(src.shape, np.uint8) #感兴趣区域RO ...

  4. python提取图片感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法

    方法一:使用轮廓 步骤1 """src为原图""" ROI = np.zeros(src.shape, np.uint8) #感兴趣区域RO ...

  5. python简单目标检测代码_Python Opencv实现单目标检测的示例代码

    一 简介 目标检测即为在图像中找到自己感兴趣的部分,将其分割出来进行下一步操作,可避免背景的干扰.以下介绍几种基于opencv的单目标检测算法,算法总体思想先尽量将目标区域的像素值全置为1,背景区域全 ...

  6. python opencv实时显示测量数据_python OpenCV 宽度测量

    机器视觉第六次实验 一.实验目的 通过OpenCV第六次进行实验,对图片进行宽度测量. 二.实验内容 对图片进行宽度测量. 三.实验过程 我使用的是python语言+openCV对图片进行宽度测量的功 ...

  7. python调用摄像头录制视频_Python OpenCV使用摄像头捕获视频

    我们知道,OpenCV是一款强大的跨平台的计算机视觉库,使用它能完成我们对于图像和视频处理的很多功能,今天,我们使用OpenCV来捕获计算机摄像头的视频. 使用OpenCV捕获摄像头视频 我们知道,视 ...

  8. pythonopencv提取轮廓区域_Python + Opencv 实现轮廓提取,轮廓区域面积计算

    Python + Opencv2 实现轮廓提取,轮廓区域面积计算: 对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结 ...

  9. python人脸识别门禁_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(一)

    一.设计目标:旨在PC端上搭建一款具有指纹识别与人脸识别功能的门禁兼考勤系统.该系统同时具备普通用户模式.管理员模式与超级管理员模式,下面具体介绍每种模式下的功能. 1)普通用户模式 该模式可分为收集 ...

最新文章

  1. redis企业级应用(下)-如何维护redis的key
  2. linux c 指针 内存 泄漏几种情况
  3. android7.1默认背光亮度及编译调试
  4. linux下的僵尸进程处理SIGCHLD信号【转】
  5. java判断或_Java 条件判断
  6. python程序显示自己的版权_手把手教你Pycharm皮肤主题及个性化设置,python程序员必备-Go语言中文社区...
  7. 加载本地json文件,并利用批处理调用Chrome显示html
  8. 微信分享签名无效php_php实现微信分享朋友链接功能
  9. 建立局域网计算机应安装,两台电脑如何建立局域网
  10. 转: 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
  11. 【转】深入理解Java:SimpleDateFormat安全的时间格式化
  12. js:防抖动与节流【转载】
  13. 知识产权(笔记 1-3章)
  14. Multisim14仿真基本模拟电路之 10.5电压比较器及其应用电路的仿真实验与分析
  15. idea一个工作空间打开多个项目
  16. uni-app npm安装以及在uni-APP用npm安装echarts
  17. 牛客网—Java练习题
  18. 【交互设计师必备书单】资深交互设计师推荐的交互设计师必看的七本书
  19. 《普陀区加快发展网络安全产业实施意见》的通知
  20. java中protect是什么_Java中public、private、protecte、default、public void是什么意思 | 学步园...

热门文章

  1. 成功者的13个良好习惯
  2. 图象处理基本算法[整理]
  3. Linux加密框架 crypto crypto_larval | crypto_larval_alloc | __crypto_register_alg 介绍
  4. 初学larval 第二篇(大神绕道哦,针对新手友好的一篇)
  5. 【MySQL】听柠檬班公开课后,学习笔记及作业(二)
  6. 旁听硕士答辩——爱立信,WireShark,GGSN
  7. 虚拟视频驱动vivi.c分析(linux-3.4.2版本)
  8. Tensorflow基础知识
  9. 定时器-----每天定时删除临时文件
  10. PPT文件限制编辑如何取消