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 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
Apr 24 Python
python处理csv数据动态显示曲线实例代码
Jan 23 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
python json 递归打印所有json子节点信息的例子
Feb 27 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
Python中格式化字符串的四种实现
May 26 Python
Python语言中的数据类型-序列
Feb 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
一步一步学习PHP(1) php开发环境配置
2010/02/15 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
JavaScript国旗变换效果代码
2008/08/13 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
Python中生成器和yield语句的用法详解
2015/04/17 Python
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
python目录与文件名操作例子
2016/08/28 Python
Python将多份excel表格整理成一份表格
2018/01/03 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
python中sys.argv函数精简概括
2018/07/08 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
pytorch 常用线性函数详解
2020/01/15 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
python map比for循环快在哪
2020/09/21 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
Python实现粒子群算法的示例
2021/02/14 Python
冰淇淋开店创业计划书
2014/02/01 职场文书
园林设计专业毕业生求职信
2014/03/23 职场文书
小学作文评语大全
2014/04/21 职场文书
北京天坛导游词
2015/02/12 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers