Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
Image CVExplate/CV侵蚀:如何避免分离对象之间的连接?_Image_Image Processing_Opencv_Image Manipulation - Fatal编程技术网

Image CVExplate/CV侵蚀:如何避免分离对象之间的连接?

Image CVExplate/CV侵蚀:如何避免分离对象之间的连接?,image,image-processing,opencv,image-manipulation,Image,Image Processing,Opencv,Image Manipulation,我想在OpenCv中分离对象,如下图所示: 但如果我使用CVExplate或CV腐蚀,对象会一起生长。。。如何使用OpenCv做到这一点?据我所知,OpenCv没有“使用XOR进行扩展”(尽管拥有它会非常好)。 为了获得类似的结果,您可以尝试腐蚀(如“d”)并使用腐蚀中心作为Voronoi分割的种子,然后可以对原始图像进行分割。腐蚀和放大后,尝试对图像进行阈值化以消除弱元素。只应保留强区域,从而改善对象分离。顺便说一下,您是否可以更清楚地了解CVDiplate或CVDecreate的问题。看起来

我想在OpenCv中分离对象,如下图所示:
但如果我使用CVExplate或CV腐蚀,对象会一起生长。。。如何使用OpenCv做到这一点?

据我所知,OpenCv没有“使用XOR进行扩展”(尽管拥有它会非常好)。

为了获得类似的结果,您可以尝试腐蚀(如“d”)并使用腐蚀中心作为Voronoi分割的种子,然后可以对原始图像进行分割。

腐蚀和放大后,尝试对图像进行阈值化以消除弱元素。只应保留强区域,从而改善对象分离。顺便说一下,您是否可以更清楚地了解CVDiplate或CVDecreate的问题。

看起来您需要编写自己的扩展函数,然后自己添加xor功能

根据opencv文档,以下是CVDiplate使用的规则:

dst=扩张(src,元素):dst(x,y)=元素中的最大值(x',y'))src(x+x',y+y'))

以下是起点的伪代码(不包括xor代码):

void my\u deplate(img){
对于(i=0;i对于(i=-window_size;i=img.width | | x<0 | | y>=img.height | | | y)你能告诉我这个函数“outof_bounds(img,cur|u col,cur|row)”的用法吗?如果你编写它的伪代码就好了。
void my_dilate(img) {

  for(i = 0; i < img.height; i++) {
    for(j = 0; j < img.width; j++) {
       max_pixel = get_max_pixel_in_window(img, i, j);
       img.pixel(i,j) = max_pixel;
    }
  }  

}

int get_max_pixel_in_window(img, center_row, center_col) {
   int window_size = 3;
   int cur_max = 0;
   for(i = -window_size; i <= window_size; i++) {
     for(j = -window_size; j <= window_size; j++) {
        int cur_col = center_col + i; 
        int cur_row = center_row + j;
        if(out_of_bounds(img, cur_col, cur_row)) {
            continue;
        }
        int cur_pix = img.pixel(center_row + i, center_col + j);
        if(cur_pix > cur_max) {
           cur_max = cur_pix;
        }
     }
   }
   return cur_max;
}

// returns true if the x, y coordinate is outside of the image
int out_of_bounds(img, x, y) {
  if(x >= img.width || x < 0 || y >= img.height || y <= 0) {
    return 1;
  }
  return 0;
}