c++ - OpenCV - 一张照片中有多少个黑色物体?

标签 c++ opencv

好的,所以我正在尝试使用 c++ 的 openCV,我想为黑色的对象做一个简单的检测程序。所以我有这个简单的代码:

int main()
{
    Mat3b bgr = imread("C:/Users/sesoa/Desktop/photos/shapes.png");

    Mat3b hsv;
    cvtColor(bgr, hsv, COLOR_BGR2HSV);

    Mat1b mask1, mask2;
    inRange(hsv, Scalar(0, 0, 0, 0), Scalar(180, 255, 30, 0), mask1);
    inRange(hsv, Scalar(0, 0, 0, 0), Scalar(180, 255, 40, 0), mask2);



    Mat1b mask = mask1 | mask2;

    imshow("Mask", mask);
    waitKey();

    return 0;
}

shapes.png 是这样的: enter image description here

所有的形状都是圆形的,颜色是黑色。我想让我的程序告诉我有多少个连接的黑色对象。形状下的文字也是黑色的。所以它也向我展示了这一点,没关系,因为无论如何这是一张测试照片。

如何修改我的程序来检测照片中有多少个相连的黑色对象? (在这张照片中,输出应该是“60”,因为有 8 个对象和 49 个字母 + 3 个字母是“i”,所以我们必须计算点数)。

编辑:

我想让程序计算黑色物体的数量。我已经像这样取出所有黑色物体: enter image description here

最佳答案

如果你想计算对象的数量,只需执行以下操作:

std::vector<std::vector<cv::Point> > contours; 
std::vector<cv::Vec4i> hierarchy;
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) ); // canny_output is the binary image

这将为您提供二值图像 (contours.size()) 中的所有轮廓。如果您只想要特定的轮廓,您可以使用轮廓区域进行过滤。

希望对您有所帮助!

关于c++ - OpenCV - 一张照片中有多少个黑色物体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43891222/

相关文章:

c++ - 连接 OpenCV 时对 SGILL 进行编程

c++ - 使用 OpenCV 进行相机校准

python - 如何在python中使用opencv读取图像的掩码

c++ - 如何在字符右侧的 QString 中查找元素

c++ - 为什么 cv::Mat::data 总是指向一个 uchar?

c++ - 删除并删除iter?

c++ - zlib - gzip 的零压缩率

c++ - QT (C++) 中的简单声音 (.wav) 播放应用程序

image - 无法在 OpenCV 中分配大图像

opencv - opencv中的SIFT无法正常工作