11年it研发经验,从一个会计转行为算法工程师,学过C#,c++,java,android,php,go,js,python,CNN神经网络,四千多篇博文,三千多篇原创,只为与你分享,共同成长,一起进步,关注我,给你分享更多干货知识!

目录

安装

跟踪根据id分配颜色:

改变窗口大小:

移动位置

选取矩形ROI

选取多边形ROI

绘制图形


安装

pip install opencv-python

跟踪根据id分配颜色:

def get_color(idx):idx = idx * 5color = ((37 * idx) % 255, (17 * idx) % 255, (29 * idx) % 255)return color

改变窗口大小:

c++:


创建窗口时候改变下参数就可以鼠标随意拖动窗口改变大小啦cv::namedWindow("camera", CV_WINDOW_NORMAL);//CV_WINDOW_NORMAL就是0
cv::imshow("camera", frame);

python:


imgpath=r"d:/20200708002140.jpg"
width=1200
height=800
img=cv2.imread(imgpath)cv2.namedWindow("canny", 0)
cv2.resizeWindow("canny", 300, 300)  # 设置窗口大小cv2.imshow("canny", img)
cv2.waitKey()

移动位置

imgpath=r"d:/20200708002140.jpg"
width=1200
height=800img=cv2.imread(imgpath)cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# 改变窗口位置:left topcv2.moveWindow("image", 1000, 100)#改变窗口位置:left topcv2.imshow("image", img)
cv2.waitKey()

选取矩形ROI

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

import cv2import imutilsimg = cv2.imread("./test_image.jpg")img = imutils.resize(img, width=500)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()

选取多边形ROI

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

1. 单击左键,选择多边形的点;

2. 单击右键,删除最近一次选择的点;

3. 单击中键,确定ROI区域并可视化。

4. 按”S“键,将多边形ROI区域的点保存到本地”config.pkl"文件中。

import cv2
import numpy as np
import joblibpts = []  # 用于存放点
select_ok = False
def draw_roi(event, x, y, flags, param):img2 = img.copy()global select_okif event == cv2.EVENT_LBUTTONDOWN:  # 左键点击,选择点if select_ok:pts.clear()pts.append((x, y))select_ok = Falseif event == cv2.EVENT_RBUTTONDOWN:  # 右键点击,取消最近一次选择的点select_ok = Trueif (event == cv2.EVENT_LBUTTONDBLCLK):select_ok=Trueif event == cv2.EVENT_MBUTTONDOWN:  # 中键绘制轮廓pts.pop()if select_ok:mask = np.zeros(img.shape, np.uint8)points = np.array(pts, np.int32)# saved_data = {"ROI": pts}joblib.dump(value=points, filename=pkl_file)print('select ok points')print(points)# 画多边形img2 = cv2.polylines(img2, [points], True, (0, 255, 0), 2)# cv2.imshow('mask', mask)elif len(pts) > 0:# img2=cv2.polylines(img2, [np.array(pts, np.int32)], True, (255, 0, 255), 2)for i in range(len(pts)):cv2.circle(img2, pts[i],3, (255, 0, 255), -1)  # x ,y 为鼠标点击地方的坐标if i<len(pts)-1:cv2.line(img=img2, pt1=pts[i], pt2=pts[i + 1], color=(255, 0, 255), thickness=2)cv2.imshow('image', img2)# 创建图像与窗口并将窗口与回调函数绑定
# img = cv2.imread("./zhai_first.jpg")
# img = cv2.imread("./nuohua_first.jpg")
img = cv2.imread("d:/caoyuan.jpg")
pkl_file="zhai_config.pkl"
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_roi)
print("[INFO] 单击左键:选择ROI点,单击右键:选择完毕,单击中键:撤销一步")
print("[INFO] 按 ESC 退出")# while True:
key = cv2.waitKey(0) & 0xFF
print("select end----")
if len(pts) > 0:print("ok")
if key == 27:print("stop")cv2.destroyAllWindows()

读取config.pkl:

     model1 = joblib.load(filename="config.pkl")print(model1)

没有选择完毕时,都画时,会出现意想不到的情况:

import cv2
import numpy as np
import joblibpts = []  # 用于存放点# 统一的:mouse callback function
def draw_roi(event, x, y, flags, param):img2 = img.copy()select_ok=Falseif event == cv2.EVENT_LBUTTONDOWN:  # 左键点击,选择点pts.append((x, y))if event == cv2.EVENT_RBUTTONDOWN:  # 右键点击,取消最近一次选择的点select_ok = Trueif (event == cv2.EVENT_LBUTTONDBLCLK):select_ok=Trueif event == cv2.EVENT_MBUTTONDOWN:  # 中键绘制轮廓pts.pop()if select_ok:mask = np.zeros(img.shape, np.uint8)points = np.array(pts, np.int32)print(points)# saved_data = {"ROI": pts}joblib.dump(value=points, filename=pkl_file)print('select ok points',points)# 画多边形# mask = cv2.polylines(img, [points], True, (255, 0, 255), 2)# cv2.imshow('mask', mask)if len(pts) > 0:img2=cv2.polylines(img, [np.array(pts, np.int32)], True, (255, 0, 255), 2)for i in range(len(pts)):cv2.circle(img2, pts[i],3, (255, 0, 255), -1)  # x ,y 为鼠标点击地方的坐标# if i<len(pts)-1:#     cv2.line(img=img2, pt1=pts[i], pt2=pts[i + 1], color=(255, 0, 255), thickness=2)cv2.imshow('image', img2)# 创建图像与窗口并将窗口与回调函数绑定
# img = cv2.imread("./zhai_first.jpg")
img = cv2.imread("./nuohua_first.jpg")
pkl_file="zhai_config.pkl"
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_roi)
print("[INFO] 单击左键:选择点,单击右键:删除上一次选择的点,单击中键:确定ROI区域")
print("[INFO] 按 ESC 退出")# while True:
key = cv2.waitKey(0) & 0xFF
print("select end----")
if len(pts) > 0:print("ok")
if key == 27:print("stop")cv2.destroyAllWindows()

画的螺旋状:

绘制图形

以下内容转自:

OpenCV入门(26):矩形、圆形、扇形及任意多边形的绘制_Home丶Basic的博客-CSDN博客_opencv 扇形

import cv2
import numpy as npnewImageInfo = (500,500,3)
dst = np.zeros(newImageInfo,np.uint8)# 绘制矩形  1.目标图片  2.左上角  3.右下角  4.颜色  5.内容是否填充(-1:填充; 》0的值:线条宽度)
cv2.rectangle(dst,(50,100),(200,300),(255,0,0),-1)
# 绘制圆形  1.目标图片  2.圆心  3.半径  4.颜色  5.是否填充
cv2.circle(dst,(250,250),80,(0,255,0),2)
# 绘制扇形  1.目标图片  2.椭圆圆心  3.长短轴长度  4.偏转角度  5.圆弧起始角度  6.终止角度  7.颜色  8.是否填充
cv2.ellipse(dst,(256,256),(150,100),0,0,145,(255,255,0),-1)
# 绘制任意多边形
points = np.array([[150,50],[140,140],[200,170],[250,250],[150,50]],np.int32)
# print(points.shape)#  --->(5, 2)
points = points.reshape((-1,1,2))
# print(points.shape)#  --->(5, 1, 2)
cv2.polylines(dst,[points],True,(0,255,255))cv2.imshow('dst',dst)
cv2.waitKey(0)

绘制圆扇形

# 绘制圆形扇形  1.目标图片  2.椭圆圆心  3.长短轴长度  4.偏转角度  5.圆弧起始角度  6.终止角度  7.颜色  8.是否填充
cv2.ellipse(dst,(256,256),(150,150),0,0,-45,(255,255,0),0)

opencv改变imshow窗口大小,窗口位置,ROI相关推荐

  1. opencv 调整窗口大小_opencv改变imshow窗口大小,窗口位置的方法

    opencv改变imshow窗口大小,窗口位置的方法 如下所示: cv2.HoughLinesP cv2.namedWindow("enhanced",0); cv2.resize ...

  2. python opencv显示图片 窗口调节_opencv python全屏显示、置窗口大小和位置

    opencv python全屏显示.设置窗口大小和位置 文章目录: 一.全屏显示图片或视频 二.设置窗口的大小和位置 1.设置窗口的大小 2.设置窗口的位置 一.全屏显示图片或视频 有时我们需要显示图 ...

  3. opencv python全屏显示、置窗口大小和位置

    opencv python全屏显示.设置窗口大小和位置 文章目录: 一.全屏显示图片或视频 二.设置窗口的大小和位置 1.设置窗口的大小 2.设置窗口的位置 一.全屏显示图片或视频 有时我们需要显示图 ...

  4. OpenCV实现显示窗口大小可调整,imshow函数鼠标拖动

    主要函数: cv::namedWindow("window name",flag) cv::namedWindow功能为创建一个窗口,第一个参数设置窗口的名字,第二个参数指定窗口标 ...

  5. 【AHK】鼠标调整窗口大小/移动窗口位置/窗口置顶/透明度

    通过AHK,设置窗体大小或位置,首先是两种鼠标调节窗体方案,后面是快捷键,注意修改快捷键的位置有两个,仿照Ubuntu调节窗体的快捷键 Alt+F7.Alt+F8,个人感觉比要按着ALT调节的小工具要 ...

  6. 【OpenCV-Python】5.OpenCV的图形用户界面窗口控制

    5.OpenCV的图形用户界面窗口控制 文章目录 前言 一.窗口控制 1.创建窗口 2.关闭窗口 3.调整窗口大小 二.OpenCV-Python读写显示图片固定格式 三.OpenCV-Python资 ...

  7. opencv 感兴趣区域提取 (ROI)

    opencv 感兴趣区域提取 (ROI) 1)使用像素坐标来提取ROI,前提是知道感兴趣区域的具体坐标范围 def img_cut():os.chdir(input)img_row = 1for im ...

  8. mfc 默认窗口大小和位置是如何设置的

    mfc 默认窗口大小和位置是如何设置的 默认窗口大小和位置是如何设置的 窗口最终是由Windows API 函数::CreateWindowEx创建,::CreateWindowEx需要窗口的信息,其 ...

  9. duilib 子窗口位置_duilib绝对定位与相对定位

    前言 duilib中窗口,布局,控件等在屏幕上的显示位置都是按照配置好的xml文件规则显示的,每个显示元素的位置大小也需要显式指定,才能呈现出更好看的界面效果,显示元素的位置有两种配置规则,即绝对位置 ...

最新文章

  1. 倪光南院士:openEuler与全球开发者共同推动计算产业发展
  2. [20150608]dbms_random.value.txt
  3. jlist放jbutton 按钮事件失效_电动高处作业吊篮操作如何面对一些突发事件
  4. 1.10 编程基础之简单排序 03 成绩排序 3分 python
  5. Dubbo(五)Dubbo 简单监控平台(monitor)搭建
  6. 应用vb编程_VB编程中的列表框综合应用讲解
  7. 实战Vue:ToDoList
  8. SolidWorks2020无法获得下列许可SOLIDWORKS Standard.Server节点已经关闭或是没有响应。(-96,7,11003)
  9. 基于python的漏洞扫描器_基于Python的Web漏洞扫描器
  10. 服务器没有D盘怎么架设传奇?
  11. 基于linux 的 PCI PCIe 总线分析总结
  12. python 音频文件 转列表 比对相似度
  13. flex布局对行内子元素的影响
  14. 关于模态分析的基础知识总结
  15. 2021高考成绩查询怎么查小分,2021微信哪个小程序可以查成绩 高考成绩怎么查
  16. Pr 入门系列之十三:添加字幕
  17. OpenCV笔记02:用cv2.imread函数读取图片
  18. ROS SMACH示例教程(三)
  19. 一个Java初学者的体验
  20. 多伦多大学好吗_多伦多大学多伦多大学生命科学好吗?

热门文章

  1. 用文件fw读写链表_用FORTRAN95写的sgy文件读写程序
  2. 灰度值取值范围_一幅灰度图像,用8bit量化,取值范围为[0,255],其中0表示(),255表示()。...
  3. 华为笔记本怎么激活windows_取代Windows?最美国产操作系统诞生,华为笔记本电脑已搭载...
  4. android坐标判断三角形,Android实现三角形气泡效果方式汇总
  5. 常用的JVM参数,你现在就记好!
  6. VS Code有哪些奇技淫巧?
  7. 聊聊那块近10万块钱的铁皮
  8. 每日一皮:996标配工位原来是这样的!
  9. 每日一皮:这个不要轻易尝试,执行有生命危险
  10. 未转变者空投指令服务器,未转变者空投指令 | 手游网游页游攻略大全