OpenCV-Python选择ROI

  • 1. 矩形ROI,直接使用切片,简单粗暴
  • 2. 使用OpenCV中的一些函数获取ROI区域,这个用的最多
  • 3. 使用鼠标获取ROI区域
  • 4. 鼠标获取多边形ROI

1. 矩形ROI,直接使用切片,简单粗暴

import cv2src = cv2.imread("D:\\python_script\\ffff\\qipan.png")
roi = src[20:150, 50:300 ]cv2.imshow('roi',roi)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. 使用OpenCV中的一些函数获取ROI区域,这个用的最多

import numpy as np
from matplotlib import pyplot as plt
import cv2src = cv2.imread("D:\\python_script\\ffff\\qipan.png")ROI = np.zeros(src.shape, np.uint8) #感兴趣区域ROI
proimage0 = src.copy()               #复制原图"""提取轮廓"""
proimage1=cv2.cvtColor(proimage0,cv2.COLOR_BGR2GRAY)   #转换成灰度图
proimage2=cv2.adaptiveThreshold(proimage1,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,7,7)
proimage3,contours,hierarchy=cv2.findContours(proimage2,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_NONE) #提取所有的轮廓"""ROI提取"""
cv2.drawContours(ROI, contours, 1,(255,255,255),-1)       #ROI区域填充白色,轮廓ID1
ROI=cv2.cvtColor(ROI,cv2.COLOR_BGR2GRAY)                  #转换成灰度图
ROI=cv2.adaptiveThreshold(ROI,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,7,7)                                     #自适应阈值化
imgroi= cv2.bitwise_and(ROI,proimage3)                   #图像交运算 ,获取的是原图处理——提取轮廓后的ROItitles = ['Original Image', 'proimage1','proimage2', 'proimage3']
images = [proimage0, proimage1, proimage2, proimage3]
for i in range(4):plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')plt.title(titles[i])plt.xticks([])plt.yticks([])
plt.show()cv2.imshow('roi',roi)
cv2.imshow('imgroi',imgroi)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. 使用鼠标获取ROI区域

OpenCV-python自带 API 可直接选择矩形区域作为ROI,该API位于目标追踪模块,主要是cv2.selectROI()函数

import cv2img = cv2.imread("D:\\python_script\\ffff\\qipan.png")roi = cv2.selectROI(windowName="roi", img=img, showCrosshair=True, fromCenter=False)
x, y, w, h = roicv2.rectangle(img=img, pt1=(x, y), pt2=(x + w, y + h), color=(0, 0, 255), thickness=2)
cv2.imshow("roi", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. 鼠标获取多边形ROI

多边形ROI,主要利用鼠标交互进行绘制:

  1. 单击左键,选择多边形的点;
  2. 单击右键,删除最近一次选择的点;
  3. 单击中键,确定ROI区域并可视化。
  4. 按”S“键,将多边形ROI区域的点保存到本地”config.pkl"文件中

import cv2
import numpy as np
import joblibpts = []  # 用于存放点# 统一的:mouse callback function
def draw_roi(event, x, y, flags, param):img2 = img.copy()if event == cv2.EVENT_LBUTTONDOWN:  # 左键点击,选择点pts.append((x, y))if event == cv2.EVENT_RBUTTONDOWN:  # 右键点击,取消最近一次选择的点pts.pop()if event == cv2.EVENT_MBUTTONDOWN:  # 中键绘制轮廓mask = np.zeros(img.shape, np.uint8)points = np.array(pts, np.int32)points = points.reshape((-1, 1, 2))# 画多边形mask = cv2.polylines(mask, [points], True, (255, 255, 255), 2)mask2 = cv2.fillPoly(mask.copy(), [points], (255, 255, 255))  # 用于求 ROImask3 = cv2.fillPoly(mask.copy(), [points], (0, 255, 0))      # 用于 显示在桌面的图像show_image = cv2.addWeighted(src1=img, alpha=0.8, src2=mask3, beta=0.2, gamma=0)cv2.imshow("mask", mask2)cv2.imshow("show_img", show_image)ROI = cv2.bitwise_and(mask2, img)cv2.imshow("ROI", ROI)cv2.waitKey(0)if len(pts) > 0:# 将pts中的最后一点画出来cv2.circle(img2, pts[-1], 3, (0, 0, 255), -1)if len(pts) > 1:# 画线for i in range(len(pts) - 1):cv2.circle(img2, pts[i], 5, (0, 0, 255), -1)  # x ,y 为鼠标点击地方的坐标cv2.line(img=img2, pt1=pts[i], pt2=pts[i + 1], color=(255, 0, 0), thickness=2)cv2.imshow('image', img2)# 创建图像与窗口并将窗口与回调函数绑定
img = cv2.imread("D:\\python_script\\ffff\\qipan.png")
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_roi)
print("[INFO] 单击左键:选择点,单击右键:删除上一次选择的点,单击中键:确定ROI区域")
print("[INFO] 按‘S’确定选择区域并保存")
print("[INFO] 按 ESC 退出")while True:key = cv2.waitKey(1) & 0xFFif key == 27:breakif key == ord("s"):saved_data = {"ROI": pts}joblib.dump(value=saved_data, filename="config.pkl")print("[INFO] ROI坐标已保存到本地.")break
cv2.destroyAllWindows()

读取获取的ROI区域

def Load_Model(filepath):img = cv2.imread("D:\\python_script\\ffff\\qipan.png")model = joblib.load(filepath)print(type(model))print(model)return modelLoad_Model('config.pkl')

OpenCV-Python 选择ROI相关推荐

  1. opencv 手选roi区域_【OpenCV】选择ROI区域

    问题描述:在测试目标跟踪算法时,需要选择不同区域作为目标,进行目标跟踪,测试目标跟踪的效果. 解决思路: 1.OpenCV中提供了鼠标交互控制,利用setMouseCallback()给固定的窗口设置 ...

  2. OpenCV+python:ROI与泛洪填充

    1,ROI 感兴趣区(Region of Interest,ROI) 是图像的一部分,它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法生 ...

  3. ocr python opencv_如何使用(opencv/python)来实现OCR处

    今天我们来介绍一下如何使用(opencv/python)来实现OCR处理银行票据.文末有代码和相关文档下载! 在第一部分中,我们将讨论两个主题: 1.首先,我们将了解MICR E-13B字体,美国,英 ...

  4. 学习Opencv+Python之银行卡卡号识别

    学习Opencv+Python之银行卡卡号识别 思路: 获取模板轮廓 获取模板中每个数字的轮廓 获取银行卡卡号轮廓 分别提取卡号中的每个数字的轮廓 对比识别 代码: # 导入工具包 from imut ...

  5. pythonopencv读取图像属性_2、OpenCV Python 图像属性获取

    __author__ = "WSX" import cv2 as cv import numpy as np image = cv.imread("1.JPG" ...

  6. OpenCV+python:Canny边缘检测算法

    1,边缘处理 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用. 在空域运算中来说,对图像的锐化就是计算微分.由于数字 ...

  7. python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...

    作者:Jose Garcia 翻译:吴振东 校对:张一豪 本文约4000字,建议阅读14分钟. 本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲 ...

  8. opencv python 从摄像头获取视频、帧率、分辨率等属性设置和使用

    opencv python 从摄像头获取视频.帧率.分辨率等属性设置和使用 文章目录: 1,为了获取视频,你应该创建一个 VideoCapture 对象.他的参数可以是设备的索引号,或者是一个视频文件 ...

  9. OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内

    OpenCV Python教程(3.直方图的计算与显示) 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途 ...

  10. 基于 OpenCV + Python 的人脸识别上课签到系统

    目录 前言 安装第三方库 第一步:采集人脸图像 (1)修改姓名学号 (2)运行capture_face.py (3)采集人脸图像 (4)查看采集到的人脸图像 第二步:训练模型 第三步:识别签到 (1) ...

最新文章

  1. python中的h5py开源库的使用
  2. window系统查看端口被哪个进程占用了
  3. php加mySQL制作网络硬盘_PHP实现的简单网络硬盘
  4. CXF学习(2) helloworld
  5. 700 页的机器学习总结火了!
  6. Educational Codeforces Round 68 (Rated for Div. 2)-D. 1-2-K Game
  7. SEO人员,不要见风是雨
  8. 小米路由器3c 虚拟服务器,小米路由器怎么设置_小米路由器3c设置教程-WIFI之家...
  9. 在三维空间中表示平面和直线
  10. 华为方会提供一份CRS(客户需求)和SOW(工作任务书)
  11. pycharm无法创建虚拟环境Virtualenv(Directory ...\python not found)
  12. 超人说我最叼蝙蝠侠笑了 超级英雄战力排名
  13. 用当下的力量共创未来——2017(第十五届)中国互联网经济论坛盛典
  14. UE4中VR项目的打包和发布
  15. html里面链接,html – 链接里面的一个链接
  16. 打印机墨水添加方法(二)
  17. linux怎么上网登录窗,Debian的登录窗口和inkscape的使用
  18. 仿西祠和搜狐论坛界面的bbs下载
  19. 腾讯云实时音视频带你玩转语音聊天室
  20. Android 判断手机设备是否是小米,华为,魅族设备

热门文章

  1. 交强险责任限额及基础费率表
  2. 一个贵族和他的女儿们
  3. 手机WEB页面自动化_在电脑上模拟手机模式页面实现自动化
  4. 写csv解决Excel打开乱码问题
  5. latex编译的pdf书签中不能显示公式
  6. Greenplum Vacuum表的作用
  7. NETTY-Netty的粘包和半包
  8. 微信公众号申请服务器,微信公众号服务器接口验证示例
  9. CPU处理器高清切片,看看基板和散热!
  10. 如何打造一个自己的「天空之城」,密歇根大学博士后教您虚空造物、偷天换日!...