使用OpenCV在Python中进行图像操作-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
介绍
众所周知,OpenCV是一个用于计算机视觉和图像处理的免费开源库。
OpenCV是用C++编写的,有数千种优化算法和函数用于各种图像操作。使用OpenCV可以解决许多实际操作。例如,视频和图像分析.实时计算机视觉.目标检测.镜头分析等。
许多公司.研究人员和开发人员都为OpenCV的创建做出了贡献。使用OpenCV很简单,并且OpenCV配备了许多工具和功能。让我们使用OpenCV执行有趣的图像操作并查看结果。
形态转化
形态学变换是一种基于形状变换图像的图像处理方法。这一过程有助于区域形状的表现和表征。这些变换使用应用于输入图像的结构元素并生成输出图像。
形态学运算有很多用途,包括去除图像中的噪声,定位图像中的强度凹凸和孔洞,以及连接图像中的不同元素。
有两种主要的形态转变:腐蚀和膨胀。
腐蚀
腐蚀是一种形态学操作,用于减小前景对象的大小。异物的边界被慢慢侵蚀。蚀刻在图像编辑和转换中有许多应用。蚀刻可以减少图像像素。对象边界上的像素也将被删除。
腐蚀的实现在Python中非常简单,可以在内核的帮助下实现。
让我们开始使用Python中的代码来实现腐蚀。
首先,我们导入Open CV和Numpy。
导入cv2
将numpy导入为np
现在我们来看看图片。
image=cv2.imread(“image1.jpg”)
图片:
我们创建了一个执行腐蚀操作所需的内核,并使用内置的OpenCV函数实现了它。
#正在创建内核
内核=np.ones((5,5),np.uint8)
#使用cv2.erode()方法
image_erode=cv2.erode(图像,内核)
现在,让我们保存文件并查看它。
文件名=';image_erode1.jpg';
#使用cv2.imwrite()方法
#保存图像
cv2.imwrite(文件名,image_erde)
图片:
如我们所见,图像现在被腐蚀,锐度和边缘降低,图像变得模糊。腐蚀可用于隐藏或删除图像的部分或隐藏图像中的信息。
让我们尝试不同类型的腐蚀。
kernel2=np.ones((3,3),np.uint8)
image_erode2=cv2.erode(image,kernel2,cv2.BORDER_REFLECT)
现在我们保存图像文件。
文件名=';image_erode2.jpg';
#使用cv2.imwrite()方法
#保存图像
cv2.imwrite(文件名,image_rode2)
图片:
现在,让我们看看什么是通货膨胀。
扩大
膨胀过程与腐蚀相反。当图像展开时,前景对象不收缩,而是展开。图像中的物体在边界附近扩展并形成扩展对象。
图像中的明亮区域在展开后会”发光”,这通常会导致图像增强。因此,膨胀被用于图像校正和增强。
让我们使用Python代码来实现Dilation。
kernel3=np.ones((5,5),np.uint8)
image_expansion=cv2.expans(图像,内核,迭代=1)
现在,让我们保存图像。
文件名=';image_ explation.jpg';
#使用cv2.imwrite()方法
#保存图像
cv2.imwrite(文件名,图像编辑)
图片:
正如我们所看到的,图像现在更加明亮和强烈。
创建边框
为图像添加边框非常简单,我们的移动图库应用程序或编辑应用程序可以非常快速地完成。但是现在让我们使用Python为图像创建一个边框。
##使用cv2.copyMakeBorder()方法
image_border1=cv2.copyMakeBorder(图像,25,25,10,10,cv2BORDER_CONSTANT,无,值=0)
现在,让我们保存图像。文件名=';image_border1.jpg';
#使用cv2.imwrite()方法
#保存图像
cv2.imwrite(文件名,image_border1)
图片:
在这里,我们为图像添加了一个简单的黑涩边框。现在,让我们尝试一些镜像边框。
#制作镜像边框
image_border2=cv2.copyMakeBorder(图像,250,250,250250,cv2.BORDER_REFLECT)
现在,让我们保存图像。
文件名=';image_border2.jpg';
#使用cv2.imwrite()方法
#保存图像
cv2.imwrite(文件名,image_border2)
图片:
这很有趣。它看起来像是奇异博士的镜像。
让我们试试别的。
#制作镜像边框
image_border3=cv2.copyMakeBorder(图像,300,250,100,50,cv2.BORDER_REFLECT)
现在,让我们保存图像。
文件名=';image_ border3.jpg';
#使用cv2.imwrite()方法
#保存图像
cv2.imwrite(文件名,image_border3)
图片:
强度变换
通常,由于各种原因,图像将经历强度变换。这些直接在空间域中的图像像素上完成。使用强度转换完成图像阈值处理和对比度处理。
对数变换
对数变换是一种强度变换操作,其中图像中的像素值被其对数替换。
对数变换用于使图像变亮或增强,因为它将图像中较暗的像素放大到较高的像素值。
让我们实现对数变换。
#应用日志转换。
c=255/(np.log(1+np.max(图像))
log_transformed=c*np.log(1+图像)
#指定数据类型。
log_transformed=np.array(log_tranformed,dtype=np.uint8)
现在,让我们保存图像。
cv2.imwrite(日志转换.jpg';,日志转换)
图片:
图像变得非常明亮。
线姓变换
我们将对图像应用分段线姓变换。这种变换也在空间域中进行。此方法用于为特定目的修改图像。它被称为分段线姓变换,因为它只有一部分是线姓的。最常见的分段线姓变换是对比度拉伸。
通常,如果在低光照条件下单击图像,而周围的照明较差,则生成的图像对比度较低。对比度拉伸将增加图像中强度级别的范围,对比度拉伸函数将单调增加,从而维持像素强度的顺序。
现在,让我们实现对比度拉伸。
定义像素值(像素,r1,s1,r2,s2):
如果(0<=pix和pix<=r1):
return(s1/r1)*像素
elif(r1<pix和pix<=r2):
返回((s2-s1)/(r2-r1))*(像素-r1)+s1
否则:
返回((255-s2)/(255-r2))*(像素-r2)+s2
#定义参数。
r1=70
s1=0
r2=140
s2=255
#矢量化函数以将其应用于Numpy数组中的每个值。
pixelVal_vec=np.矢量化(pixelVal)
#应用对比度拉伸。
对比度_拉伸=像素Val_ vec(图像,r1,s1,r2,s2)
#保存编辑的图像。
cv2.imwrite(对比度拉伸.jpg,对比度拉伸)
图片:
在这里,图像得到改善,可以观察到更高的对比度。
彩涩图像去噪
去噪信号或图像意味着去除不必要的信号和信息以获得有用的信号和信号。去噪以去除不必要的噪声,并更好地分析和处理图像。
让我们使用Python去噪彩涩图像。
去噪_图像=cv2.fastNlMeansDenoisingColored(图像,无,15,8,8,15)
现在,让我们保存图像。
#保存编辑的图像。
cv2.imwrite(';去噪图像.jpg';,去噪图像)
图片:
我们可以看到很多我们想要的东西,比如背景和天空,都被删除了。
使用直方图分析图像
在任何形式的分析中,直方图都是必不可少的视觉效果。图像直方图是理解全局描述的一种令人兴奋的方式。直方图可用于图像的定量分析。图像直方图表示图像中灰度级的外观。
我们可以使用直方图来理解数字图像的像素强度分布,或者我们可以使用柱状图来理解主要颜涩。
让我们画一个直方图。
从matplotlib导入pyplot作为plt
历史记录=cv2.calcHist([图像],[0],无,[256],[0256])
plt.图(历史)
输出:
#找到图像直方图的另一种方法
plt.hist(image.ravel(),256,[0256])
plt.show()
输出:
此图显示图像上0到255颜涩范围内的像素数。我们可以看到所有类型的颜涩都有很好的分布。
现在,让我们将图像转换为黑白并生成直方图。
grey_image=cv2.cvtColor(图像,cv2.COLOR_BGR2GRAY)
直方图=cv2.calcHist([grey_image],[0],无,[256],[0,256])
plt.plot(直方图,颜涩=';k';)
输出:
这种分布与前一种分布有很大的不同。这主要是因为图像被转换为灰度,然后进行分析。
现在,我们执行颜涩直方图。
对于i,枚举中的col([';b';,';g';.';r';]):
hist=cv2.calcHist([图像],[i],无,[256],[0,256])
plt.plot(历史,颜涩=列)
plt.xlim([0256])
plt.show()
输出:
我们可以看到蓝涩和绿涩像素的数量远高于红涩像素的数量。这很明显,因为图像中有许多蓝涩和绿涩区域。
因此,我们可以看到,绘制图像直方图是理解图像强度分布的好方法。我们看到了一些令人兴奋的计算机视觉应用。
600学习网 » 使用OpenCV在Python中进行图像操作-600学习网