Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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++_Opencv_Image Processing_Ocr_Gd - Fatal编程技术网

C++ 二值图像中的不同区域数(c+;+;)

C++ 二值图像中的不同区域数(c+;+;),c++,opencv,image-processing,ocr,gd,C++,Opencv,Image Processing,Ocr,Gd,我有黑白图像分为4个部分。我需要知道每个区段有多少个区域 下面是一个解释更好的例子。 我想知道是否在任何最流行的C++图像处理库中都有现成的API ?(如gd、cimg、opencv?)您只需使用opencv的connectedComponents(),您所寻求的答案比它返回的数字少一个: #include <opencv2/opencv.hpp> using namespace cv; int main(int argc, char** argv) { if(argc!

我有黑白图像分为4个部分。我需要知道每个区段有多少个区域

下面是一个解释更好的例子。


我想知道<强>是否在任何最流行的C++图像处理库中都有现成的API <强>?(如gd、cimg、opencv?)

您只需使用opencv
connectedComponents()
,您所寻求的答案比它返回的数字少一个:

#include <opencv2/opencv.hpp>
using namespace cv;

int main(int argc, char** argv)
{
    if(argc!=2){
      std::cerr << "ERROR: Please supply an image name" << std::endl;
      exit(1);
    }

    // Load up the image and check
    Mat image = imread(argv[1], IMREAD_GRAYSCALE);
    if(image.empty()){
      std::cerr << "ERROR: Unable to load image" << std::endl;
      exit(1);
    }

    // Calculate connected components
    Mat label;
    int n=connectedComponents(image,label,8,CV_16U);
    std::cout << "n=" << n << std::endl;
}
#包括
使用名称空间cv;
int main(int argc,字符**argv)
{
如果(argc!=2){

cerr我想你可以选择一个随机点和泛光填充。检查所有像素是否为黑色或泛光颜色,如果不是,选择另一个随机的、未着色的点并用另一种颜色泛光填充。重复直到没有未着色的像素,同时计算需要的迭代次数。实际上,你不需要选择一个随机像素,它可以d同样容易确定,你可以从左上角横穿和向下扫描。谢谢你的评论,但我正在从一些可用的图像处理库中寻找完整的解决方案。谢谢你的帮助。但是我得到了这个图像的错误答案。我扩展了你的代码,将图像分割成小区域p。s、 抱歉,点击save太快了。你得到了什么答案?你使用了什么图像?这是我从第一个切片中获得的图像。你可以看到区域是2,但斜体连接的组件-1斜体表示为1。在英国已经很晚了,所以我明天会再看。请尝试两个非常简单的图像,一个是2个t在图像中画正方形或圆形,看看是否可以找出错误。也可以尝试在白色背景上画黑色线条,就像你的问题暗示的那样-因此我想先将你的图像阈值设置为纯黑白。哦,我想我知道发生了什么-线条比我从示例中预期的要细,这允许泛光填充流动通过线条将两个应该分开的区域连接起来。你能试着用稍微胖一点的线条,或者对它们进行形态学放大,看看这是否有帮助?