热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

用opencv给图片换背景色的示例代码

这篇文章主要介绍了用opencv给图片换背景色的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

图像平滑

模糊/平滑图片来消除图片噪声

OpenCV函数:cv2.blur(), cv2.GaussianBlur(), cv2.medianBlur(), cv2.bilateralFilter()

2D 卷积

OpenCV中用cv2.filter2D()实现卷积操作,比如我们的核是下面这样(3×3区域像素的和除以10):

img = cv2.imread('lena.jpg')
# 定义卷积核
kernel = np.ones((3, 3), np.float32) / 10
# 卷积操作,-1表示通道数与原图相同
dst = cv2.filter2D(img, -1, kernel)

卷积操作,-1表示通道数与原图相同

dst = cv2.filter2D(img, -1, kernel)

定义卷## 标题积核

kernel = np.ones((3, 3), np.float32) / 10

卷积操作,-1表示通道数与原图相同

dst = cv2.filter2D(img, -1, kernel)

模糊和滤波

它们都属于卷积,不同滤波方法之间只是卷积核不同(对线性滤波而言)

低通滤波器是模糊,高通滤波器是锐化

常见噪声有 椒盐噪声 和 高斯噪声 ,椒盐噪声可以理解为斑点,随机出现在图像中的黑点或白点;高斯噪声可以理解为拍摄图片时由于光照等原因造成的噪声。

均值滤波

均值滤波是一种最简单的滤波处理,它取的是卷积核区域内元素的均值,用 cv2.blur() 实现,如3×3的卷积核:

img = cv2.imread('lena.jpg')
# 均值模糊
blur = cv2.blur(img,(3,3)

高斯滤波

不同于均值滤波,高斯滤波的卷积核权重并不相同:中间像素点权重最高,越远离中心的像素权重越小,类似于正态分布。

OpenCV中对应函数为 cv2.GaussianBlur(src,ksize,sigmaX) ,指定的高斯核的宽和高必须为奇数。

img = cv2.imread(‘gaussian_noise.bmp')

均值滤波vs高斯滤波

blur = cv2.blur(img, (5, 5)) # 均值滤波
gaussian = cv2.GaussianBlur(img, (5, 5), 1) # 高斯滤波

参数3,σx值越大,模糊效果越明显。高斯滤波相比均值滤波效率要慢,但可以有效消除高斯噪声,能保留更多的图像细节,所以经常被称为最有用的滤波器。

中值滤波
中值又叫中位数,是所有数排序后取中间的值。中值滤波就是用区域内的中值来代替本像素值,所以那种孤立的斑点,如0或255很容易消除掉,适用于去除椒盐噪声和斑点噪声。中值是一种非线性操作,效率相比前面几种线性滤波要慢。

img = cv2.imread(‘salt_noise.bmp', 0)

双边滤波
操作基本都会损失掉图像细节信息,尤其前面介绍的线性滤波器,图像的边缘信息很难保留下来。然而,边缘(edge)信息是图像中很重要的一个特征,所以这才有了双边滤波。用cv2.bilateralFilter()函数实现:

img = cv2.imread(‘lena.jpg')

形态学操作
包括膨胀、腐蚀、开运算和闭运算等形态学操作

OpenCV函数:cv2.erode(), cv2.dilate(), cv2.morphologyEx()

腐蚀
腐蚀的效果是把图片”变瘦”,其原理是在原图的小区域内取局部最小值。因为是二值化图,只有0和255,所以小区域内有一个是0该像素点就为0:

OpenCV中用cv2.erode()函数进行腐蚀,只需要指定核的大小就行:

import cv2
import numpy as np
img = cv2.imread(‘j.bmp', 0)
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel) # 腐蚀

这个核也叫结构元素,因为形态学操作其实也是应用卷积来实现的。结构元素可以是矩形/椭圆/十字形,可以用cv2.getStructuringElement()来生成不同形状的结构元素,比如:

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字结构

膨胀

膨胀与腐蚀相反,取的是局部最大值,效果是把图片”变胖”:

dilation = cv2.dilate(img, kernel) # 膨胀

开/闭运算

先腐蚀后膨胀叫开运算(因为先腐蚀会分开物体,这样容易记住),其作用是:分离物体,消除小区域。这类形态学操作用 cv2.morphologyEx() 函数实现:

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
img = cv2.imread(‘j_noise_out.bmp', 0)

开运算

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

闭运算则相反:先膨胀后腐蚀(先膨胀会使白色的部分扩张,以至于消除/“闭合”物体里面的小黑洞,所以叫闭运算)

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

形态学梯度

膨胀图减去腐蚀图,dilation - erosion,这样会得到物体的轮廓:

gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

顶帽
原图减去开运算后的图:src - opening

tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

黑帽
闭运算后的图减去原图:closing - src

blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

给图片换背景的源代码。欢迎一起学习的小伙伴指教!

#imagechuli
import cv2
import time
import numpy as np

#图片名子
name = "1.jpg"
#程序计时
start = time.perf_counter()
#显示图片
img=cv2.imread("./input_image/3.jpg")
#图片缩放
img = cv2.resize(img,None,fx = 0.5,fy = 0.5)
rows,cols,channels = img.shape
#print(rows,cols,channels)
cv2.resizeWindow("origin", 0, 0);
#cv2.imshow("origin",img)
#转换为二值化图像
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
rows,cols,channels = hsv.shape
 
#图片的二值化处理
lower_blue = np.array([90,70,70])
upper_blue = np.array([110,255,255])
mask = cv2.inRange(hsv,lower_blue,upper_blue)

def shap():
 
 #图像的腐蚀
 kernel = np.ones((4, 4), np.uint8)
 erode=cv2.erode(mask,kernel,iteratiOns=1)
 #cv2.imshow("erode",erode)
 
 #膨胀操作
 kernel = np.ones((2, 2), np.uint8)
 dilate=cv2.dilate(erode,None,iteratiOns=3)
 #cv2.imshow("dilate",dilate)
 #循环遍历
 for i in range(rows):
  for j in range(cols):
   if dilate[i,j]==255:
    img[i,j]=(0,0,255)#注意是BGR通道,不是RGB
 #cv2.imshow("res",img)
 bianyuanchuli()
 
 #cv2.destroyAllWindows()
 
def bianyuanchuli():
 #图像边缘检测的内核大小
 data = (900,1100)
 img_copy = img.copy()
 imgCanny = cv2.Canny(img, *data)
 #cv2.imshow("imgcanny",imgCanny)
 # 创建矩形结构
 g = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
 g2 = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
 # 膨化处理
 # 更细腻
 img_dilate = cv2.dilate(imgCanny, g,iteratiOns=1)
 #cv2.imshow("img_dilate",img_dilate)
 # 更粗大
 img_dilate2 = cv2.dilate(imgCanny, g2)

 shape = img_dilate.shape
 # 提取
 for i in range(shape[0]):
  for j in range(shape[1]):
   if img_dilate2[i, j] == 0: # 二维定位到三维
    img[i, j] = [0, 0, 0]
 #cv2.imshow('dst1', img)
 
 dst = cv2.GaussianBlur(img, (3, 3), 0, 0, cv2.BORDER_DEFAULT)

 for i in range(shape[0]):
  for j in range(shape[1]):
   if img_dilate[i, j] != 0: # 二维定位到三维
    img_copy[i, j] = dst[i, j]

 #cv2.imshow('dst', img_copy)
 cv2.imwrite("./out_image/3.jpg",img_copy) 
 shap()
# 窗口等待的命令,0表示无限等待
cv2.destroyAllWindows()
cv2.waitKey(0)
dur = time.perf_counter() - start
print("程序总用时:{:.2f}s".format(dur))

 到此这篇关于用opencv给图片换背景色的示例代码的文章就介绍到这了,更多相关opencv 图片换背景色内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 介绍一个提供正版Windows软件下载的权威网站,确保用户能够安全合法地获取所需软件。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 优化版Windows 10 LTSC 21H2企业版:适用于低内存设备
    此版本为经过优化的Windows 10 LTSC 21H2企业版,特别适合低内存配置的计算机。它基于官方版本进行了精简和性能优化,确保在资源有限的情况下依然能够稳定运行。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
author-avatar
霓Nin氵ini
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有