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中变量交换的例子
Aug 25 Python
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
python实现跨excel的工作表sheet之间的复制方法
May 03 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
Python3模拟curl发送post请求操作示例
May 03 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
Nov 19 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
Python读取ini配置文件传参的简单示例
Jan 05 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
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
javascript中new关键字详解
2015/12/14 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
前端性能优化及技巧
2016/05/06 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
python编码最佳实践之总结
2016/02/14 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
python之PyMongo使用总结
2017/05/26 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
Python网页解析器使用实例详解
2020/05/30 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
python 对xml解析的示例
2021/02/27 Python
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
简短大学毕业感言
2014/01/18 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
八一建军节活动方案
2014/02/10 职场文书
药店主任岗位责任制
2014/02/10 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
党员公开承诺书内容
2014/05/20 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript