python3+opencv生成不规则黑白mask实例


Posted in Python onFebruary 19, 2020

废话不多说,直接上代码吧!

# -*- 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, pointsMax
 global lsPointsChoose, tpPointsChoose # 存入选择的点
 global pointsCount # 对鼠标按下的点计数
 global img2, ROI_bymouse_flag
 img2 = 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 提取多边形ROI
  tpPointsChoose.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 = 1
   lsPointsChoose = []
 
  cv2.imshow('src', img2)
 # -------------------------右键按下清除轨迹-----------------------------
 if event == cv2.EVENT_RBUTTONDOWN: # 右键点击
  print("right-mouse")
  pointsCount = 0
  tpPointsChoose = []
  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, mask2
 mask = 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实例

以上这篇python3+opencv生成不规则黑白mask实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解决字典中的值是列表问题的方法
Mar 04 Python
玩转python爬虫之cookie使用方法
Feb 17 Python
python监控linux内存并写入mongodb(推荐)
Sep 11 Python
Python获取二维矩阵每列最大值的方法
Apr 03 Python
python print 按逗号或空格分隔的方法
May 02 Python
在python中实现对list求和及求积
Nov 14 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
python django生成迁移文件的实例
Aug 31 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
Android Q之气泡弹窗的实现示例
Jun 23 Python
python定时截屏实现
Nov 02 Python
Python使用pandas导入xlsx格式的excel文件内容操作代码
Dec 24 Python
使用celery和Django处理异步任务的流程分析
Feb 19 #Python
Python Numpy,mask图像的生成详解
Feb 19 #Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 #Python
Python中logging日志库实例详解
Feb 19 #Python
在Python中通过threshold创建mask方式
Feb 19 #Python
python实现简单颜色识别程序
Feb 19 #Python
python绘制封闭多边形教程
Feb 18 #Python
You might like
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
Python实现学校管理系统
2018/01/11 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
英文留学推荐信范文
2014/01/25 职场文书
认购协议书范本
2014/04/22 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
商业计划书之服装
2019/09/09 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS