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 相关文章推荐
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
Python中title()方法的使用简介
May 20 Python
python结合opencv实现人脸检测与跟踪
Jun 08 Python
Python探索之ModelForm代码详解
Oct 26 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
Jun 22 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
Python实现电视里的5毛特效实例代码详解
May 15 Python
python实现批量命名照片
Jun 18 Python
什么是python的自省
Jun 21 Python
Python如何telnet到网络设备
Feb 18 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实现的网站目录扫描索引工具
2016/09/08 PHP
php的常量和变量实例详解
2017/06/27 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
vue3实现v-model原理详解
2019/10/09 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Python监控主机是否存活并以邮件报警
2015/09/22 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
优良学风班总结材料
2014/02/08 职场文书
企业员工培训感言
2014/02/26 职场文书
团结演讲稿范文
2014/05/23 职场文书
工作经历证明书范文
2014/11/02 职场文书
2015年清明节活动总结
2015/02/09 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
Python爬虫基础讲解之请求
2021/05/13 Python
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
实战Python爬虫爬取酷我音乐
2022/04/11 Python
Golang连接并操作MySQL
2022/04/14 MySQL