思路:绘制封闭曲线,获得轮廓, 对轮廓进行填充
因为在绘制曲线的时候,记录了起始点和最后一个点的坐标,用以使曲线封闭,所以绘制的时候只需要绘制到起点的附近区域即可,松开鼠标后,曲线连接起点和终点,实现封闭

注意:该代码不适合绘制复杂图形

import numpy as np
import matplotlib.pyplot as plt
from numpy.core.defchararray import count
import cv2 as cv#step 1. 读取,预处理
img_source = cv.imread("duo.jpg")  #原图(三通道)
img = cv.cvtColor(img_source, cv.COLOR_BGR2GRAY)  #转为灰度图像(单通道),便于查找轮廓
img[:,:] = 0  #改成黑色图像,用于获取所绘制的闭合曲线的轮廓
cv.namedWindow('image', cv.WINDOW_AUTOSIZE)  #在原图中显示
cv.namedWindow('test')#step 2. 绘制任意形状的图形
drawing = False  #开始鼠标移动绘图模式
ix, iy= -1, -1
px, py = -1, -1
#call back function
def drawCurve(event, x, y, flags, param):global ix, iy, drawing, px, pyif event == cv.EVENT_LBUTTONDOWN:drawing = Trueprint("start point")ix, iy = x, ypx, py = x, yelif event == cv.EVENT_MOUSEMOVE:if drawing:  #关键是如何记录相邻两次的坐标print("mouse move")#用于获得轮廓的图像cv.circle(img, (x, y), 1, (255, 255, 255), -1)   #注意灰度图像中的白色是全部255cv.line(img, (ix, iy), (x,y), (255, 255, 255), 2)  #关键是如何记录相邻两次的坐标#在原图中显示cv.circle(img_source, (x, y), 1, (0, 255, 255), -1)cv.line(img_source, (ix, iy), (x,y), (0, 255, 255), 2)ix, iy = x,y              #用来记录上一个点的坐标elif event == cv.EVENT_LBUTTONUP:drawing = False#使曲线闭合, 用于获取轮廓cv.line(img, (x, y), (px, py), (255, 255, 255), 2)  #将曲线补充成闭合曲线#仅用于在原图中显示cv.line(img_source, (x, y), (px, py), (0, 255, 255), 2)  #将曲线补充成闭合曲线cv.setMouseCallback("image", drawCurve)  #可以在原图中直接绘制
cv.setMouseCallback('test', drawCurve)  #可以在获得轮廓的图中直接绘制
while True:k = cv.waitKey(1)cv.imshow("image", img_source)  #显示原图cv.imshow("test", img)   #显示获取轮廓的图像if k == 27:break#step 3. 查找轮廓
#一般情形考虑先二值化,因为这里获取轮廓的图像在前两部的操作过程中只有黑白两种颜色(轮廓为白)
contours, hierarchy = cv.findContours(img, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
cv.drawContours(img_source, contours, -1, (0,255,0), -1)
print("congralations!")#step 4. 给轮廓填充颜色
cv.fillPoly(img_source,[contours[1]],(255,0,0))  #填充内部
cv.imshow("result", img_source)cv.waitKey(0)
cv.destroyAllWindows()print('hello world')

测试图像:

因为在绘制曲线的时候,记录了起始点和最后一个点的坐标,用以使曲线封闭,所以绘制的时候只需要绘制到起点的附近区域即可,松开鼠标后,曲线连接起点和终点,实现封闭

绘制简单封闭图形并且进行填充相关推荐

  1. 【Qt】2D绘图之绘制简单的图形

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制图形 04. 画笔和画刷 05. 绘制弧线 06. 附录 01. 概述 Qt中提供了强大的2D绘图系统,可以使用同一A ...

  2. 利用matlab绘制简单IFS图形(Sierpinski三角形和BarnsleyFern巴恩斯利蕨)

    利用matlab绘制简单IFS图形(Sierpinski谢尔宾斯基三角形和BarnsleyFern巴恩斯利蕨) 一.SierpinskiTriangle谢尔宾斯基三角形 谢尔宾斯基三角形(英语:Sie ...

  3. java代码绘制简单的图形

    教大家如何用循环嵌套绘制几个简单的图形! 在一个循环语句内部再嵌套一循环或多个循环,称为嵌套循环.while.do-while与for循环可以任意嵌套多层. 下面我们先来打印一个矩形. /*打印矩形. ...

  4. python 绘制简单的图形

    简单的图形--python入门 代码: import turtle as t import mathdef main():t.pensize(14)t.pu()t.goto(-150,50)t.pd( ...

  5. 怎样用python绘制简单的图形_用python 画几个简单图案

    原博文 2019-11-15 09:44 − 1 turtle turtle这个库真的很好玩,用很简单几行代码就能画出好看的图案,最近无聊翻了翻之前自己画的哈哈哈哈,分享几个代码 画一个类似五颜六色的 ...

  6. 使用Python中的Turtle库绘制简单的图形

    Turtle图形库 Turtle库是Python内置的图形化模块,属于标准库之一,位于Python安装目录的lib文件夹下,常用函数有以下几种: 画笔控制函数 penup():抬起画笔: pendow ...

  7. 怎么用python画简单的图-使用Python中的Turtle库绘制简单的图形

    Turtle图形库 Turtle库是Python内置的图形化模块,属于标准库之一,位于Python安装目录的lib文件夹下,常用函数有以下几种: 画笔控制函数 penup():抬起画笔: pendow ...

  8. python用turtle库绘制树图形_使用Python中的Turtle库绘制简单的图形

    Turtle图形库 Turtle库是Python内置的图形化模块,属于标准库之一,位于Python安装目录的lib文件夹下,常用函数有以下几种: 画笔控制函数 penup():抬起画笔: pendow ...

  9. python画简单图-使用Python中的Turtle库绘制简单的图形

    Turtle图形库 Turtle库是Python内置的图形化模块,属于标准库之一,位于Python安装目录的lib文件夹下,常用函数有以下几种: 画笔控制函数 penup():抬起画笔: pendow ...

最新文章

  1. 中国高校4篇研究今日同时登上Nature!清华北大上交浙工大等在列
  2. autocad不能画图_设计院老司机谈CAD:学习AutoCAD掌握方法技巧更重要
  3. FLEX SharedObject介绍及应用
  4. 【EMV L2】数据元格式 对齐方式
  5. Linux下配置服务器节点上的时区
  6. mssql 无法启动调试器 数据为空_Windows无法启动:如何利用PE拯救桌面重要数据?...
  7. vxworks驱动开发基础
  8. tensorflow 数据归一化_TensorFlow——批量归一化操作
  9. 关于boostrap的modal隐藏问题(前端框架)
  10. 螺纹的规定,http://www.doc88.com/p-30089302852.html
  11. OpenCV 学习笔记-day14 图像几何形状绘制 (rect类 RotatedRect 类,rectangle绘制矩形 circle绘制圆形函数 line画线函数 ellipse画椭圆函数)
  12. GT610的亲兄弟 GT620
  13. 3D建模师和3D动画师哪个职业前景好些?
  14. UOS安装 MySQL5.7
  15. linux 工具——终端分屏与vim分屏
  16. MPChart饼图自定义图例
  17. 使用BERT做中文文本相似度计算与文本分类
  18. 是你想要的,在游戏中学编程
  19. 使用计算机完成怎样的工作计划,电脑上使用便签记录工作计划如何设置闹钟定时提醒?...
  20. java 秒转换日期_Java 将日期或秒数转换为日时分秒

热门文章

  1. 三个数相减的平方公式_小学一年级数学难点解析,附34个必考公式,孩子必备!...
  2. 5G+人工智能技术在垃圾分类中的应用
  3. #SORA#celery原生配置文件研究
  4. 探索 Apple 公司股价数据-Python实现
  5. php插入音乐代码,如何修改Wordpress博客代码在文章中插入音乐 | 垃圾站
  6. D45_摄像机组件Camera
  7. udp测试带宽特别低_低带宽视图和MSDN的其他隐藏(和将来)功能
  8. ARM 开发板安装Alpine Linux (英)
  9. 野火stm32开发板给定一个脉冲程序_STM32开发板哪个好,推荐一款高性价比stm32MP157开发板...
  10. 2021年茶艺师(高级)考试内容及茶艺师(高级)考试资料