我在处理OpenCV项目方面仍然很新,但我遇到了一个问题,我已经在一段时间内处理了一个递归函数。
基本上,这个想法也是使用强弱阈值在图像中找到连接的组件。代码如下:
Mat DoubleThresholding(int thresh_strong, int thresh_weak, Mat image, int thresh_type, int denoise_k_size)
{
Mat strong, weak;
// cc_mask will be a global variable so it can be modified
// by the Connector function
if (image.channels() >1){
cvtColor( image, image, COLOR_RGB2GRAY ); // cvtColor(src, dst, code,dstCn)
}
threshold(image, weak, thresh_weak, 50, thresh_type);
threshold(image, strong, thresh_strong, 50, thresh_type);
if(denoise_k_size>0){
Denoise(strong, denoise_k_size);
}
cc_mask = strong+weak;
for(int i=0; i<image.cols; i++)
{
for(int j=0; j<image.rows; j++)
{
if(cc_mask.at<uchar>(j,i)==100)
{
cc_mask.at<uchar>(j,i)=255;
//printf("mistake caught at row =%i col =%i )\n" , j,i);
if((i-1)>0) {Connector(i-1,j);}
if((i+1)<image.cols) {Connector(i+1,j);}
if((j-1)>0) {Connector(i,j-1);}
if((j+1)<image.rows) {Connector(i,j+1);}
}
}
}
for(int i=0; i<image.cols; i++)
{
for(int j=0; j<image.rows; j++)
{
if(cc_mask.at<uchar>(j,i)!=255)
{
cc_mask.at<uchar>(j,i) = 0;
}
}
}
return cc_mask.clone();
};
void Connector( int i, int j)
{
if (cc_mask.empty() == true)
{
return;
}
if (i<0 || i>cc_mask.cols || j<0 || j>cc_mask.rows)
{
return;
}
else
{
if(cc_mask.at<uchar>(j,i) == 50)
{
cc_mask.at<uchar>(j,i) = 255;
Connector(i-1,j);
Connector(i+1,j);
Connector(i,j-1);
Connector(i,j+1);
}
return ;
}
};
我一直遇到一个seg故障问题,我知道它与尝试访问超出界限的东西有关,但我不能为我的生活找出我似乎的情况失踪。
提前感谢您的帮助。