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 相关文章推荐
windows下wxPython开发环境安装与配置方法
Jun 28 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
谈谈如何手动释放Python的内存
Dec 17 Python
python筛选出两个文件中重复行的方法
May 31 Python
python 五子棋如何获得鼠标点击坐标
Nov 04 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
Python通过文本和图片生成词云图
May 21 Python
PyTorch的torch.cat用法
Jun 28 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 Python
Python代码实现双链表
May 25 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
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
php设置编码格式的方法
2013/03/05 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
jQuery 表格工具集
2010/04/25 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
js实现无缝轮播图
2020/03/09 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
python3获取当前文件的上一级目录实例
2018/04/26 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
GWT都有什么特性
2016/12/02 面试题
程序员岗位职责
2013/11/11 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
研究生个人学年总结
2015/02/14 职场文书
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏