Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 跟踪连通像素_C++_C_Image Processing_Opencv - Fatal编程技术网

C++ 跟踪连通像素

C++ 跟踪连通像素,c++,c,image-processing,opencv,C++,C,Image Processing,Opencv,我要跟踪图像中所有连接的像素。我使用canny算法进行边缘检测,现在需要得到每个唯一的形状 以下是我的代码 x_axis = marker_i; // x & y co-ordinates of the first detected pixels y_axis = marker_j; do { for (int i=0;i<8;i++){ if(i==0){x_axis = x_axis-1; y_axis = y_axis-1;} // each iteratio

我要跟踪图像中所有连接的像素。我使用canny算法进行边缘检测,现在需要得到每个唯一的形状

以下是我的代码

x_axis = marker_i;   // x & y co-ordinates of the first detected pixels
y_axis = marker_j;

do
{

for (int i=0;i<8;i++){

if(i==0){x_axis = x_axis-1;  y_axis = y_axis-1;}  // each iteration checks one 
if(i==1){x_axis = x_axis;    y_axis = y_axis+1;}  // of the 8 adjacent pixels 
if(i==2){x_axis = x_axis;    y_axis = y_axis+1;}  // for a match 
if(i==3){x_axis = x_axis+1;  y_axis = y_axis-2;}
if(i==4){x_axis = x_axis;    y_axis = y_axis+2;}
if(i==5){x_axis = x_axis+1;  y_axis = y_axis-2;}
if(i==6){x_axis = x_axis;    y_axis = y_axis+1;}
if(i==7){x_axis = x_axis;    y_axis = y_axis+1;}

if(x_axis >= 1024 || y_axis >= 1280){ x_axis = 0; y_axis = 0;}

if(ch_rd == red [x_axis][y_axis] && ch_gr == green[x_axis][y_axis] 
&& ch_bl == blue[x_axis][y_axis] && pixel_comp[x_axis][y_axis]==0){ 

map++;
pixel_comp[x_axis][y_axis] = 2;                  // marks that pixel as read
pixal[num][0]    = x_axis;
pixal[num][1]    = y_axis;

if (map == 1){ curs[0] = x_axis; curs[1] = y_axis;}
if (map >  1){ div[est] = num; est++;}   // if there is more than one detection
num++;                                   // adds remaining to an array div

}

}

if(map==0){ 
x_axis = pixal[div[prev]][0]; y_axis = pixal[div[prev]][1]; prev++; 
    // if nothing is detected goes to the last item from array div
}
else{ 
x_axis = curs[0]; y_axis = curs[1]; 
} 
if(map==0 && prev>=est){ dead_end = 1;}
map = 0;
}
while (dead_end==0);
x_轴=标记_i;//第一个检测到的像素的x&y坐标
y_轴=标记_j;
做
{
对于(int i=0;i=1024 | | y|u轴>=1280){x|u轴=0;y|u轴=0;}
如果(Chu rd==红色[x_轴][y_轴]&Chu gr==绿色[x_轴][y_轴]
&&chu bl==蓝色[x_轴][y_轴]&像素组[x_轴][y_轴]==0{
map++;
pixel_comp[x_轴][y_轴]=2;//将该像素标记为已读
pixal[num][0]=x_轴;
pixal[num][1]=y_轴;
如果(map==1){curs[0]=x_轴;curs[1]=y_轴;}
if(map>1){div[est]=num;est++;}//如果存在多个检测
num++;//将剩余部分添加到数组div中
}
}
如果(map==0){
x_轴=像素[div[prev]][0];y_轴=像素[div[prev]][1];prev++;
//如果未检测到任何内容,则转到数组div中的最后一项
}
否则{
x_轴=游标[0];y_轴=游标[1];
} 
如果(map==0&&prev>=est){dead_end=1;}
map=0;
}
while(死端==0);

我在以前版本的程序中使用了它,它会不幸地检测到所有形状,即使它们没有连接,而不是一个接一个地连接,现在我一直在尝试opencv,想知道是否有一个函数或实现可以做到这一点,或者甚至是我可以使用的非opencv实现或示例?什么是用于此目的的简单算法?

一个好的起点是维基百科上的文章。这有填充算法的动画


[你没有要求更正你的程序。]

一个好的开始是维基百科上的文章。这有填充算法的动画


[您没有要求更正您的程序。]

谷歌提取连接的组件。谷歌提取连接的组件。该算法现在可以工作了,我更改了此代码中不可用的初始化值,它给了我错误,现在已修复。我怀疑您的算法是洪水填充。如果你可以投票回答这个问题算法现在可以工作了,我更改了一个初始化值,这个值在这段代码中不可用,它给了我错误,现在它被修复了。我怀疑你的算法是洪水填充。如果是这样的话,你可以投票给这个答案