如何利用OpenCV进行特征(颜色、形状)提取
作者:liiiiiiiiiiiiike
特征提取是降维过程的一部分,其中原始数据的初始集被划分并减少到更易于管理的组,这篇文章主要给大家介绍了关于如何利用OpenCV进行特征(颜色、形状)提取的相关资料,需要的朋友可以参考下
图像处理
图像处理所做的只是从图像中提取有用的信息,从而减少数据量,但保留描述图像特征的像素。
下面从图像中提取颜色、形状和纹理特征的方法开始
1. 颜色
每次处理图像项目时,图像的色彩空间都会成为最先探索的地方,而我们最常用的就是RGB色彩空间。那么接下来使用OpenCV,我们可以将图像的颜色空间转换为HSV、LAB、灰度、YCrCb、CMYK等。
a. HSV(色相饱和度值)
- 色调H:描述主波长,是指定颜色的通道
- 饱和度S:描述色调/颜色的纯度/色调
- 值V:描述颜色的强度
import cv2 from google.colab.patches import cv2_imshow image = cv2.imread(image_file) hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) cv2_imshow(hsv_image)
下图为RGB和HSV
b. LAB
- L:描述颜色的亮度,与强度互换使用
- A : 颜色成分范围,从绿色到品红色
- B:从蓝色到黄色的颜色分量
import cv2 from google.colab.patches import cv2_imshow image = cv2.imread(image_file) lab_image = cv2.cvtColor(image, cv2.COLOR_BGR2LAB) cv2_imshow(lab_image)
下图为RGB和LAB颜色空间可视化
b. YCrCb
- Y : 伽马校正后从 RGB 颜色空间获得的亮度
- Cr:描述红色 ® 分量与亮度的距离
- Cb:描述蓝色 (B) 分量与亮度的距离
import cv2 from google.colab.patches import cv2_imshow image = cv2.imread(image_file) ycrcb_image = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb) cv2_imshow(ycrcb_image)
下图为RGB 与 YCrCb 颜色空间
一旦我们已经识别或探索了足够多的图像色彩空间,并确定我们只对单个通道感兴趣,我们就可以使用*cv2.inRange()*来屏蔽不需要的像素。这在 HSV 颜色空间中尤其实用。
import cv2 from google.colab.patches import cv2_imshow # Reading the original image image_spot = cv2.imread(image_file) cv2_imshow(image_spot) # Converting it to HSV color space hsv_image_spot = cv2.cvtColor(image_spot, cv2.COLOR_BGR2HSV) cv2_imshow(hsv_image_spot) # Setting the black pixel mask and perform bitwise_and to get only the black pixels mask = cv2.inRange(hsv_image_spot, (0, 0, 0), (180, 255, 40)) masked = cv2.bitwise_and(hsv_image_spot, hsv_image_spot, mask=mask) cv2_imshow(masked)
RGB vs HSV vs Masked 图像使用 cv2.inRange() 检索黑点
2. 形状
一旦我们充分探索了颜色特征,我们可能会在某个时候想要提取图像中的形状。例如,我们任务是找到不同类型的杯子,而颜色不是特别重要。同样,需要做的就是将图像转换为其他颜色空间,看看是否有任何颜色空间会使对象的边缘或形状更加突出,然后我们就可以使用cv2.finContours来检索图像中的所有轮廓。具体使用方式可以查看OpenCV文档
总结
到此这篇关于如何利用OpenCV进行特征(颜色、形状)提取的文章就介绍到这了,更多相关OpenCV特征提取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!