基于轮廓提取的 图像填充法

简介: 这篇文章介绍了一种基于轮廓提取的图像填充法,使用CVPR2021开源的pidinet项目进行轮廓提取,再结合OpenCV的floodFill算法实现图像的动态填充和复原功能。

基于轮廓提取的 图像填充法

一、前言

在设计裸眼3d视频生成算法的时候涉及到了这一点,遂记录一下
版本1,效果如下:
在这里插入图片描述
设计思路:一开始想直接用水漫法填充的时候,很容易发现下面的问题,就是抹少了,或抹多了,所以我们采用先转轮廓图,然后再用水漫法进行填充的方法。
在这里插入图片描述

  • 可以看到确实是好了一些

在这里插入图片描述

二、解决方案

1、轮廓提取的方案

采用CVPR2021开源的pidinet项目
在这里插入图片描述在这里插入图片描述
总体识别效果,我经过试毒还算可以,配好环境后,在配下参数与新建一个文件放图片,就可以了
算是印象比较好的项目,很人性

2、图像填充法

我采用了Opencv floodFill算法,也就是常说的水漫填充法
然后,在加一个鼠标监听即可

3、图像填充法设计程序如下

import cv2 as cv
import numpy as np

def fill_image(image,x,y):
    copyImage = image.copy() # 复制原图像
    h, w = image.shape[:2] # 读取图像的宽高
    mask = np.zeros([h+2, w+2], np.uint8) # 新建图像矩阵  +2是官方函数要求
    #(0,80) 起始点,(0,100,255) 蓝色 ,(100,100,50)棕色 ,(50,50,50) 浅黑
    cv.floodFill(copyImage, mask, (x,y), (255, 255, 255), (100, 100, 50), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
    cv.namedWindow("EdgeFill", cv.WINDOW_NORMAL)
    cv.imshow("EdgeFill", copyImage)
    return copyImage

def on_mouse(event,x,y,flags,param):
    global img,src
    if event==cv.EVENT_LBUTTONDOWN:
        img=fill_image(img,x,y)
    if event==cv.EVENT_RBUTTONDOWN:
        img=src.copy()
        cv.namedWindow("EdgeFill", cv.WINDOW_NORMAL)
        cv.imshow("EdgeFill", img)

def main():
    global img,src
    srcPath=input("请输入要动态填充的处理后的轮廓图片的绝对地址:")
    print("使用说明:点击左键则开始填充,点击右键则复原")
    src = cv.imread(srcPath)
    img=src.copy()
    cv.namedWindow("EdgeFill", 0)
    cv.imshow("EdgeFill", img)
    cv.setMouseCallback("EdgeFill",on_mouse)
    cv.waitKey(0)
    cv.destroyAllWindows()

if __name__=="__main__":
    main()
相关文章
|
监控 Java 索引
APM Server监控
APM Server监控
|
存储 弹性计算 NoSQL
libcuckoo论文概述
本文简要阐述libcuckoo项目的两篇论文基础。如有错漏之处,欢迎指出一起讨论交流。 ## 论文1 《MemC3: Compact and Concurrent MemCache with Dumber Caching and Smarter Hashing》 这篇论文主要讲了在多线程模式下如何提升cuckoo hash table的吞吐。 ### 问题 传统hash表在并发效率上并不
2017 0
libcuckoo论文概述
|
10月前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
981 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
2174 3
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
缓存 监控 时序数据库
influxdb报错:cache-max-memory-size exceeded
influxdb报错:cache-max-memory-size exceeded
488 0
|
算法 计算机视觉 开发者
OpenCV图形检测中绘制图像的轮廓讲解与实战应用(附Python源码)
OpenCV图形检测中绘制图像的轮廓讲解与实战应用(附Python源码)
334 0
|
消息中间件 缓存 负载均衡
中间件的使用场景
【6月更文挑战第15天】
731 5
|
Java API 开发者
|
安全 数据安全/隐私保护 开发者
【Python】 已解决:ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: ‘e:\anaconda\i
【Python】 已解决:ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: ‘e:\anaconda\i
3128 11
【Python】 已解决:ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: ‘e:\anaconda\i