(学习笔记)基于opencv颜色过滤只保留红色区域(适用于图像分割方面)

  1. H分量得是(0,8),(120,180),S与V分量没有做筛选
  2. 分别取得H,S,V分量,注意图像转化的时候BGR2HSV,所以s.val[0]是B或H的值,s.val[1]是G或S的值,s.val[2]则是R或V的值。另外要注意一点,因为是对彩色图像做实验,所以如果传入的图片不是3通道的彩色图片,那么就会出内存错误。
  3. opencv 的H范围是0~180,红色的H范围大概是(0~8)∪(160,180) ,S是饱和度,一般是大于一个值,S过低就是灰色(参考值S>80),V是亮度,过低就是黑色,过高就是白色(参考值220>V>50)。

    所以接下来要做的就是遍历图像,获取图像每个像素点的H,S,V分量,然后做判断,满足条件的就保留,不满足的就赋值为黑色。


  4. void colorFilter(CvMat *inputImage, CvMat *&outputImage)  
  5. {  
  6.     int i, j;  
  7.     IplImage* image = cvCreateImage(cvGetSize(inputImage), 8, 3);  
  8.     cvGetImage(inputImage, image);      
  9.     IplImage* hsv = cvCreateImage( cvGetSize(image), 8, 3 );    
  10.       
  11.     cvCvtColor(image,hsv,CV_BGR2HSV);  
  12.     int width = hsv->width;  
  13.     int height = hsv->height;  
  14.     for (i = 0; i < height; i++)  
  15.         for (j = 0; j < width; j++)  
  16.         {  
  17.             CvScalar s_hsv = cvGet2D(hsv, i, j);//获取像素点为(j, i)点的HSV的值   
  18.             /* 
  19.                 opencv 的H范围是0~180,红色的H范围大概是(0~8)∪(160,180)  
  20.                 S是饱和度,一般是大于一个值,S过低就是灰色(参考值S>80), 
  21.                 V是亮度,过低就是黑色,过高就是白色(参考值220>V>50)。 
  22.             */  
  23.             CvScalar s;  
  24.             if (!(((s_hsv.val[0]>0)&&(s_hsv.val[0]<8)) || (s_hsv.val[0]>120)&&(s_hsv.val[0]<180)))  
  25.             {  
  26.                 s.val[0] =0;  
  27.                 s.val[1]=0;  
  28.                 s.val[2]=0;  
  29.                 cvSet2D(hsv, i ,j, s);  
  30.             }  
  31.               
  32.               
  33.         }  
  34.     outputImage = cvCreateMat( hsv->height, hsv->width, CV_8UC3 );  
  35.     cvConvert(hsv, outputImage);  
  36.     cvNamedWindow("filter");  
  37.     cvShowImage("filter", hsv);  
  38.     waitKey(0);  
  39.     cvReleaseImage(&hsv);  
  40. }  
### 回答1: Jupyter是一种交互式的编程环境,可以用来进行数据分析、可视化和机器学习等任务。区域生长是图像处理中的一种方法,可以用来对图像中的目标区域进行分割。 在缺陷焊缝图像中,我们可以利用区域生长的方法来找到缺陷区域区域生长是一种基于像素相似性的算法,它从一个种子像素开始,通过合并相邻的像素来扩展一个相似的区域。我们可以根据缺陷的特征,选择一个适当的种子像素,然后利用区域生长算法来扩展出整个缺陷区域。 具体操作步骤如下: 1. 选择一个合适的种子像素,可以是缺陷区域的中心点或者边界上的一个像素。 2. 从种子像素开始,计算该像素与周围像素的相似度。一般可以使用像素之间的颜色差异或灰度差异来计算相似度。 3. 对于相似度超过一定阈值的周围像素,将其加入到缺陷区域中。 4. 循环执行步骤2和步骤3,直到没有新的像素可以加入到缺陷区域为止。 通过上述步骤,我们可以逐渐扩展出整个缺陷区域。在实际操作中,为了减少噪声影响,通常还需要设置一些阈值来过滤掉过小或者过大的连通区域。 使用Jupyter和区域生长方法进行缺陷区域的分割,可以通过Python的图像处理库(如OpenCV)实现。我们可以在Jupyter中运行相关代码,对图像进行处理,并将结果展示出来。这样可以方便地进行调试和分析,同时还可以结合其他图像处理和机器学习技术对缺陷进行更详细的分析和分类。 ### 回答2: Jupyter 是一个优秀的交互式计算笔记本工具,用于数据科学和机器学习任务。在缺陷焊缝图像中,使用区域生长算法可以有效地分割出缺陷区域区域生长是一种常见的图像分割算法,其目标是根据像素之间的相似性,将图像分割成不同的区域。在缺陷焊缝图像中,我们可以根据缺陷的特征进行像素的聚类,将缺陷区域分离出来。 首先,我们选择一个种子点,该点应该位于缺陷区域的内部。然后,从种子点开始,计算其与周围像素的相似性。如果相似性满足给定的阈值条件,则将该像素添加到缺陷区域中,并继续向周围像素扩展。这个过程不断重复,直到无法再添加新的像素为止。 在使用区域生长算法进行缺陷区域分割时,需要注意以下几点: 1. 种子点的选择要准确。种子点需要位于缺陷区域内部,并且不能位于正常区域或者其他缺陷区域内部。 2. 阈值条件的确定要合适。如果阈值设置过高,则可能会漏掉一些缺陷;如果阈值设置过低,则可能会将正常区域误判为缺陷。 3. 图像预处理的重要性。在应用区域生长算法之前,可以进行一些预处理操作,如降噪、增强对比度等,以提高算法的准确性。 总之,使用Jupyter下的区域生长算法可以有效地分割出缺陷焊缝图像中的缺陷区域。这种算法不仅简单易用,而且能够得到较好的分割效果,对于后续的缺陷检测和诊断等任务具有重要的意义。 ### 回答3: Jupyter是一种交互式的编程环境,可以方便地进行数据分析和可视化。在图像处理中,可以使用Jupyter进行区域生长分割来检测缺陷区域。 缺陷焊缝图像通常包含多个复杂的纹理和颜色变化,使得传统的图像处理方法难以有效分割出缺陷区域。而区域生长算法可以通过选择适当的种子点,并根据像素之间的相似度进行生长来完成分割。 首先,在Jupyter中导入所需的图像处理库,如OpenCV和NumPy。然后,读取缺陷焊缝图像并将其转换为灰度图像,以便于后续处理。接下来,选择一个合适的种子点,可以是一个人为选定的点或者通过自动检测算法找到的点。 然后,使用区域生长算法开始从种子点开始生长,根据像素的相似度计算将相邻的像素添加到同一区域中。可以通过比较相邻像素的灰度值、颜色或纹理等特征来判断它们是否相似。 在生长过程中,可以设置一些停止条件,如达到最大区域尺寸或像素相似度低于某个阈值。当满足停止条件时,生长过程结束,得到的区域即为缺陷区域。 最后,可以使用可视化工具将缺陷区域标记出来,以便于分析和进一步处理。 总之,使用Jupyter进行区域生长分割可以有效地检测出缺陷焊缝图像中的缺陷区域
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值