python opencv 截取矩形区域_python+OpenCV 鼠标交互图片切割矩形区域
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 鼠标交互图片切割矩形区域相关推荐
- python tkinter获取屏幕大小_Python使用鼠标滚轮调整tkinter应用程序窗口大小
图书推荐:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情:用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系统等配套 ...
- python字符串截取split 失败_python如何截断字符串
字符串本质上就是由多个字符组成的,Python 允许通过索引来操作字符,比如获取指定索引处的字符,获取指定字符在字符串中的位置 等.python中截取字符串,可以使用split()方法,或者使用索引来 ...
- python二值化 感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法
方法一:使用轮廓 步骤1 """src为原图""" ROI = np.zeros(src.shape, np.uint8) #感兴趣区域RO ...
- python提取图片感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法
方法一:使用轮廓 步骤1 """src为原图""" ROI = np.zeros(src.shape, np.uint8) #感兴趣区域RO ...
- python简单目标检测代码_Python Opencv实现单目标检测的示例代码
一 简介 目标检测即为在图像中找到自己感兴趣的部分,将其分割出来进行下一步操作,可避免背景的干扰.以下介绍几种基于opencv的单目标检测算法,算法总体思想先尽量将目标区域的像素值全置为1,背景区域全 ...
- python opencv实时显示测量数据_python OpenCV 宽度测量
机器视觉第六次实验 一.实验目的 通过OpenCV第六次进行实验,对图片进行宽度测量. 二.实验内容 对图片进行宽度测量. 三.实验过程 我使用的是python语言+openCV对图片进行宽度测量的功 ...
- python调用摄像头录制视频_Python OpenCV使用摄像头捕获视频
我们知道,OpenCV是一款强大的跨平台的计算机视觉库,使用它能完成我们对于图像和视频处理的很多功能,今天,我们使用OpenCV来捕获计算机摄像头的视频. 使用OpenCV捕获摄像头视频 我们知道,视 ...
- pythonopencv提取轮廓区域_Python + Opencv 实现轮廓提取,轮廓区域面积计算
Python + Opencv2 实现轮廓提取,轮廓区域面积计算: 对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结 ...
- python人脸识别门禁_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(一)
一.设计目标:旨在PC端上搭建一款具有指纹识别与人脸识别功能的门禁兼考勤系统.该系统同时具备普通用户模式.管理员模式与超级管理员模式,下面具体介绍每种模式下的功能. 1)普通用户模式 该模式可分为收集 ...
最新文章
- redis企业级应用(下)-如何维护redis的key
- linux c 指针 内存 泄漏几种情况
- android7.1默认背光亮度及编译调试
- linux下的僵尸进程处理SIGCHLD信号【转】
- java判断或_Java 条件判断
- python程序显示自己的版权_手把手教你Pycharm皮肤主题及个性化设置,python程序员必备-Go语言中文社区...
- 加载本地json文件,并利用批处理调用Chrome显示html
- 微信分享签名无效php_php实现微信分享朋友链接功能
- 建立局域网计算机应安装,两台电脑如何建立局域网
- 转: 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
- 【转】深入理解Java:SimpleDateFormat安全的时间格式化
- js:防抖动与节流【转载】
- 知识产权(笔记 1-3章)
- Multisim14仿真基本模拟电路之 10.5电压比较器及其应用电路的仿真实验与分析
- idea一个工作空间打开多个项目
- uni-app npm安装以及在uni-APP用npm安装echarts
- 牛客网—Java练习题
- 【交互设计师必备书单】资深交互设计师推荐的交互设计师必看的七本书
- 《普陀区加快发展网络安全产业实施意见》的通知
- java中protect是什么_Java中public、private、protecte、default、public void是什么意思 | 学步园...
热门文章
- 成功者的13个良好习惯
- 图象处理基本算法[整理]
- Linux加密框架 crypto crypto_larval | crypto_larval_alloc | __crypto_register_alg 介绍
- 初学larval 第二篇(大神绕道哦,针对新手友好的一篇)
- 【MySQL】听柠檬班公开课后,学习笔记及作业(二)
- 旁听硕士答辩——爱立信,WireShark,GGSN
- 虚拟视频驱动vivi.c分析(linux-3.4.2版本)
- Tensorflow基础知识
- 定时器-----每天定时删除临时文件
- PPT文件限制编辑如何取消