C++ 二值图像中的不同区域数(c+;+;)
我有黑白图像分为4个部分。我需要知道每个区段有多少个区域 下面是一个解释更好的例子。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!
我想知道<强>是否在任何最流行的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在图像中画正方形或圆形,看看是否可以找出错误。也可以尝试在白色背景上画黑色线条,就像你的问题暗示的那样-因此我想先将你的图像阈值设置为纯黑白。哦,我想我知道发生了什么-线条比我从示例中预期的要细,这允许泛光填充流动通过线条将两个应该分开的区域连接起来。你能试着用稍微胖一点的线条,或者对它们进行形态学放大,看看这是否有帮助?