订阅
纠错
加入自媒体

OpenCV 指南2:如何在图像中进行边缘检测?

2021-08-02 10:44
磐创AI
关注

3)如何在图像中执行颜色空间?

我们知道,每一种颜色都是红、绿、蓝三种颜色的组合。所以我们通常将颜色空间称为RGB,如果我们分析图像和视频也是如此。但是在 OpenCV 中,颜色空间是相反的顺序,即 BGR。查看下面提到的代码,我们将在其中使用 OpenCV 和 matplotlib 显示图像并观察更改。cv2_imshow(Org_img)
plt.imshow(Org_img)
使用 OpenCV 的 BGR 图像:

我们将尝试使用 matplotlib 绘制相同的图像

所以这里我们观察到,由于从 BGR 到 RGB 的颜色空间发生了变化,因此颜色发生了反向变化。现在我们将查看如何使用 cv.cvtColor() 方法将 BGR 颜色空间转换为不同的颜色空间3.1)BGR转灰色# BGR to Gray
BGR_Gray=cv.cvtColor(Org_img,cv.COLOR_BGR2GRAY)
cv2_imshow(BGR_Gray)
输出:

3.2) BGR 到 HSV:print("")
#BGR to HSV
BGR_HSV=cv.cvtColor(Org_img,cv.COLOR_BGR2HSV)
cv2_imshow(BGR_HSV)
输出:

3.3) BGR 到 LAB:print("")
#BGR to LAB
BGR_LAB=cv.cvtColor(Org_img,cv.COLOR_BGR2LAB)
cv2_imshow(BGR_LAB)
输出:

3.4)BGR转RGB:print("")
#BGR to RGB
BGR_RGB=cv.cvtColor(Org_img,cv.COLOR_BGR2RGB)
cv2_imshow(BGR_RGB)
输出:

我们还可以使用下面提到的颜色空间参数来反转上面提到的图像颜色空间:cv.COLOR_HSV2BGRcv.COLOR_LAB2BGRcv.COLOR_Gray2BGRcv.COLOR_BGR2RGB4)如何处理颜色通道?在OpenCV 中,我们可以从原始图像中分离 B、G、R 通道,然后再次合并所有 B、G、R,如下所示。Org_img=cv.imread("/content/drive/MyDrive/Colab Notebooks/Opencv/NCS/erik-mclean-jhNwxqL51xc-unsplash.jpg")
cv2_imshow(Org_img)
Canny_img=cv.Canny(Org_img,100,150)
B,G,R=cv.split(Org_img)
cv2_imshow(B)
print("")
cv2_imshow(G)
print("")
cv2_imshow(R)
print("")
print("Shape of the original BGR image: ",Org_img.shape)
print("Shape of the Blue Pixel image post split from original image: ",B.shape)
print("Shape of the Green Pixel image post split from original image: ",G.shape)
print("Shape of the Red Pixel image post split from original image: ",R.shape)
print("")
print("Merged image of the BGR images is: ")
print("")
Merged_BGR=cv.merge([B,G,R])
cv2_imshow(Merged_BGR)
上述代码的输出:原图:

带有蓝色像素的图像:

带有绿色像素的图像:

带有红色像素的图像:

合并所有三个 BGR 频道的图片发布:

上述分割图像以灰色图像的形式反映,因此为了清楚了解每个通道,我们将尝试在空白屏幕上绘制此分割图像,然后查看通道。现在,我们将 B、G、R 像素与空白图像分开使用,我们得到了下面的输出:print(" Printing the BGR images on the blank images")
blank=np.zeros(((Org_img.shape[0],Org_img.shape[1])),dtype='uint8')
Merged_B=cv.merge([B,blank,blank])
cv2_imshow(Merged_B)
print("")
Merged_G=cv.merge([blank,G,blank])
cv2_imshow(Merged_G)
print("")
Merged_R=cv.merge([blank,blank,R])
cv2_imshow(Merged_R)
上述代码的输出:蓝色通道:

绿色通道:

红色通道:

5)如何模糊图像?

有不同的方法来模糊图像。查看下面提到的代码演练以获取详细信息:平均模糊:在这里,我们将输入原始图像并与内核进行卷积。随着内核大小的增加,图像的模糊度也会增加。高斯模糊:在这里,我们将输入原始图像并与内核进行卷积。随着内核大小的增加,图像的模糊度也会增加。

我们还应该指定 X 和 Y 方向的标准偏差,分别为 sigmaX 和 sigmaY。如果只指定了 sigmaX,则 sigmaY 与 sigmaX 相同。如果两者都为零,则根据内核大小计算它们。高斯模糊对于从图像中去除高斯噪声非常有效。中值模糊:函数cv.medianBlur()取内核区域下所有像素的中值,并将中心元素替换为该中值。这对于图像中的椒盐噪声非常有效。在这里,我们将输入原始图像并与内核进行卷积。

随着内核大小的增加,图像的模糊度也会增加。但是这里的内核大小是一维形状,而不是像平均和高斯那样的二维形状。双边模糊:cv.bilateralFilter()在保持边缘锐利的同时去除噪音非常有效。但与其他过滤器相比,操作速度较慢。我们已经看到高斯滤波器获取像素周围的邻域并找到其高斯加权平均值。这个高斯滤波器是单独的空间函数,即滤波时考虑附近的像素。

它不考虑像素是否具有几乎相同的强度。它不考虑像素是否是边缘像素。所以它也模糊了边缘,这是我们不想做的。在这里,我们将输入原始图像并与内核进行卷积。随着内核大小的增加,图像的模糊度也会增加。但是这里的内核大小是 1D 形状,而不是像平均模糊和高斯模糊那样的 2D 形状。此外,为了简单起见,我们可以将 2 个 sigma 值设置为相同。Org_img=cv.imread("/content/drive/MyDrive/Colab Notebooks/Opencv/NCS/emma-shappley-S0zmYpRTZbA-unsplash.jpg")
cv2_imshow(Org_img)
print(" Averaging blur image ")
#Averaging
AvgBlur_img=cv.blur(Org_img,(7,7))
cv2_imshow(AvgBlur_img)
print(" Gaussian blur image ")
#Gaussian Blur
GaussBlur_img=cv.GaussianBlur(Org_img,(7,7),0)
cv2_imshow(GaussBlur_img)
print(" Median blur image ")
#MedianBlur
MedianBlur_img=cv.medianBlur(Org_img,7)
cv2_imshow(MedianBlur_img)
print(" Billateral blur image ")
#Billateral Blur
BillateralBlur_img=cv.bilateralFilter(Org_img,5,50,50)
cv2_imshow(BillateralBlur_img)
上述代码的输出:原图:

平均模糊图像:

高斯模糊图像:

中值模糊图像:

双边模糊图像:

<上一页  1  2  3  下一页>  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

    人工智能 猎头职位 更多
    扫码关注公众号
    OFweek人工智能网
    获取更多精彩内容
    文章纠错
    x
    *文字标题:
    *纠错内容:
    联系邮箱:
    *验 证 码:

    粤公网安备 44030502002758号