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多线程扫描端口示例
Jan 16 Python
python基于xmlrpc实现二进制文件传输的方法
Jun 02 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
python中的闭包函数
Feb 09 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
Python3实现的判断回文链表算法示例
Mar 08 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
Python函数生成器原理及使用详解
Mar 12 Python
Python列表如何更新值
May 27 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
Dec 15 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 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
对Angular中单向数据流的深入理解
2018/03/31 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
恒华伟业笔试面试题
2015/02/26 面试题
高中班长自我鉴定
2013/12/20 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
情侣吵架检讨书
2014/02/05 职场文书
作风建设年活动总结
2014/08/27 职场文书
放假通知
2015/04/14 职场文书
花木兰观后感
2015/06/10 职场文书