python3+opencv生成不规则黑白mask
# -*- coding: utf-8 -*-
import cv2
import numpy as np# -----------------------鼠标操作相关------------------------------------------
lsPointsChoose = []
tpPointsChoose = []
pointsCount = 0
count = 0
pointsMax = 10
def on_mouse(event, x, y, flags, param):global img, point1, point2, count, pointsMaxglobal lsPointsChoose, tpPointsChoose # 存入选择的点global pointsCount # 对鼠标按下的点计数global img2, ROI_bymouse_flagimg2 = img.copy() # 此行代码保证每次都重新再原图画 避免画多了# -----------------------------------------------------------# count=count+1# print("callback_count",count)# --------------------------------------------------------------if event == cv2.EVENT_LBUTTONDOWN: # 左键点击pointsCount = pointsCount + 1# 感觉这里没有用?2018年8月25日20:06:42# 为了保存绘制的区域,画的点稍晚清零# if (pointsCount == pointsMax + 1):# pointsCount = 0# tpPointsChoose = []print('pointsCount:', pointsCount)point1 = (x, y)print (x, y)# 画出点击的点cv2.circle(img2, point1, 10, (0, 255, 0), 2)# 将选取的点保存到list列表里lsPointsChoose.append([x, y]) # 用于转化为darry 提取多边形ROItpPointsChoose.append((x, y)) # 用于画点# ----------------------------------------------------------------------# 将鼠标选的点用直线连起来print(len(tpPointsChoose))for i in range(len(tpPointsChoose) - 1):print('i', i)cv2.line(img2, tpPointsChoose[i], tpPointsChoose[i + 1], (0, 0, 255), 2)# ----------------------------------------------------------------------# ----------点击到pointMax时可以提取去绘图----------------if (pointsCount == pointsMax):# -----------绘制感兴趣区域-----------ROI_byMouse()ROI_bymouse_flag = 1lsPointsChoose = []cv2.imshow('src', img2)# -------------------------右键按下清除轨迹-----------------------------if event == cv2.EVENT_RBUTTONDOWN: # 右键点击print("right-mouse")pointsCount = 0tpPointsChoose = []lsPointsChoose = []print(len(tpPointsChoose))for i in range(len(tpPointsChoose) - 1):print('i', i)cv2.line(img2, tpPointsChoose[i], tpPointsChoose[i + 1], (0, 0, 255), 2)cv2.imshow('src', img2)def ROI_byMouse():global src, ROI, ROI_flag, mask2mask = np.zeros(img.shape, np.uint8)pts = np.array([lsPointsChoose], np.int32) # pts是多边形的顶点列表(顶点集)pts = pts.reshape((-1, 1, 2))# 这里 reshape 的第一个参数为-1, 表明这一维的长度是根据后面的维度的计算出来的。# OpenCV中需要先将多边形的顶点坐标变成顶点数×1×2维的矩阵,再来绘制# --------------画多边形---------------------mask = cv2.polylines(mask, [pts], True, (255, 255, 255))##-------------填充多边形---------------------mask2 = cv2.fillPoly(mask, [pts], (255, 255, 255))cv2.imshow('mask', mask2)cv2.imwrite('mask.jpg', mask2)ROI = cv2.bitwise_and(mask2, img)#cv2.imwrite('ROI.bmp', ROI)#cv2.imshow('ROI', ROI)# -----------------------定点ROI绘制,程序中未使用-------------------
def fixed_ROI():mask = np.zeros(img.shape, np.uint8)pts = np.array([[x1, y1], [x2, y2], [x3, y3], [x4, y4]], np.int32) # 顶点集pts = pts.reshape((-1, 1, 2))mask = cv2.polylines(mask, [pts], True, (255, 255, 255))mask2 = cv2.fillPoly(mask, [pts], (255, 255, 255))cv2.imshow('mask', mask2)# cv2.imwrite('mask.bmp', mask2)# cv2.drawContours(mask,points,-1,(255,255,255),-1)ROI = cv2.bitwise_and(mask2, img)cv2.imshow('ROI', ROI)# cv2.imwrite('ROI.bmp', ROI)img = cv2.imread('yuantu.jpg')
# ---------------------------------------------------------
# --图像预处理,设置其大小
# height, width = img.shape[:2]
# size = (int(width * 0.3), int(height * 0.3))
# img = cv2.resize(img, size, interpolation=cv2.INTER_AREA)
# ------------------------------------------------------------
ROI = img.copy()
cv2.namedWindow('src')
cv2.setMouseCallback('src', on_mouse)
cv2.imshow('src', img)
cv2.waitKey(0)
python3+opencv生成不规则黑白mask相关推荐
- Win10+Python3+OpenCV+CUDA——在win中配置OpenCV4.5并与Python环境绑定
Win10+Python3+OpenCV+CUDA--在win中配置OpenCV4.5并与Python环境绑定 前言 安装Anaconda和基本库 下载对应版本的CUDA 配置方案1.通过下载预购建文 ...
- 使用Python,OpenCV生成Aruco标记
这篇博客将介绍Aruco标记是什么,以及如何使用Python,OpenCV生成Aruco标记.本文提供俩种生成方式:在线生成和代码生成: 使用OpenCV处理ArUco标签非常简单,因为OpenCV库 ...
- python3.9 执行python3.6生成的随机森林模型model.pkl报错,警告版本不一致
python3.9 执行python3.6生成的随机森林模型model.pkl报错 UserWarning: Trying to unpickle estimator RandomForestClas ...
- OpenCV蒙版图像make mask image的实例(附完整代码)
OpenCV蒙版图像make mask image的实例 OpenCV蒙版图像make mask image的实例 OpenCV蒙版图像make mask image的实例 #include &quo ...
- 计算机视觉之--使用opencv生成简笔画小视频
本教程介绍了如何使用opencv生成一副简笔画视频,包括片头.如何做画等. 1.视频包括: (1)片头:包括学号姓名,同时会出现"I Love CV"在学号和姓名的中央,而且他们是 ...
- python3 + opencv +pyzbar实时检测二维码 / 定位二维码,并绘制出二维码的框和提取二维码内容
python3 + opencv +pyzbar实时检测二维码 / 定位二维码,并绘制出二维码的框和提取二维码内容 1 pyzbar二维码检测模块 1.1. pyzbar模块介绍 1.2 pyzbar ...
- 关于如何在XP系统上运行opencv生成的C++动态库
先讲下为什么要在xp系统上运行opencv生成的C++动态库,原因是我做了一个图像检测项目,使用C#编写的,C#里有个opencvsharp图像处理包,对于C#程序员调用在舒服不过了,但是!客户比较守 ...
- python3 opencv 视频格式转换
python3 opencv 视频格式转换: import cv2 #获得视频的格式 videoCapture = cv2.VideoCapture('ad3.avi') #获得码率及尺寸 fps = ...
- allegro生成不规则钻孔
http://blog.csdn.net/adrianfeng/article/details/5680093 之前画的板子上都有少许不规则过孔,给厂家制作时都会帮忙打上,所以没在意,这次换了个厂家, ...
最新文章
- 嵌入式开发之工具---比开发手册更重要的一个命令 man page
- WebSocket 原理
- Java springcloud B2B2C o2o多用户商城 springcloud架构 (十七)上传文件
- Android Gradle manifestPlaceholders 占位符详解
- 前台提交数据到php mysql,建立一个基础的MySQL数据库,使用PHP来抓取和处理数据,并抛出给前台...
- 线性动态电路的复频域分析
- 软件自动化测试题,软件自动化测试模拟题.doc
- Python和它高大上的插件们
- 仓位管理 – 2.实战篇
- C# list删除 另外list里面的元素_python学习笔记第三课:List(列表)
- nginx配置文件被删怎么找回_恢复误删除的Nginx日志
- 9.9 单片机蜂鸣器
- 2N个数排成一行(每个数有2个), 2个1之间有1个数,2个2 之间有2个数,...2个N之间有N个数... 例312132
- 【Oracle】并行等待之PX Deq: Table Q Normal
- 数钥科技遭用户投诉:“招集令”被指息费高,曾有助贷平台被处罚
- 非线性方程(组):高维方程解法
- Uniswap v3 详解(五):Oracle 预言机
- 雷迪9000使用说明_雷迪操作手册
- 易语言安卓模拟器adb模块制作认识adb
- PhpStorm修改字体和主题
热门文章
- vue如何输出一个值_怎么在控制台打印出来data里想要的数据? Vue
- emqx速度_EMQX-3.0性能测试报告-ReadtheDocs.PDF
- jar java classpath_win7中java编程工具安装 java环境变量设置
- PostgreSQL 消息平台实践
- 过滤驱动加密文件(代码)
- 黑客渗透入门教程 第一课:粗暴的端口扫描
- 通过 Mysql 官网配置更新本地的mysql源
- 【胡策08】解题报告
- VB6 实现命令行调用时附着到原控制台
- [AaronYang]C#人爱学不学8[事件和.net4.5的弱事件深入浅出]