opencv图像分割c++
时间: 2023-06-20 16:05:21 浏览: 179
C++基于opencv图像处理的经典常见算法是实现源码(含插值、仿射变换、滤波、分割、边缘检测等).zip
OpenCV是一个非常强大的图像处理库,它提供了各种各样的图像分割算法。下面是一个使用OpenCV进行图像分割的C++示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = imread("test.jpg", IMREAD_COLOR);
if (image.empty())
{
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
Mat gray, binary;
cvtColor(image, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
Mat labels, stats, centroids;
int num_labels = connectedComponentsWithStats(binary, labels, stats, centroids);
for (int i = 1; i < num_labels; i++)
{
int left = stats.at<int>(i, CC_STAT_LEFT);
int top = stats.at<int>(i, CC_STAT_TOP);
int width = stats.at<int>(i, CC_STAT_WIDTH);
int height = stats.at<int>(i, CC_STAT_HEIGHT);
rectangle(image, Point(left, top), Point(left + width, top + height), Scalar(0, 0, 255), 2);
}
imshow("image", image);
waitKey();
return 0;
}
```
这个例子中使用了Otsu阈值分割算法,它对于大多数图像都能够自适应地找到一个合适的阈值。然后使用了OpenCV自带的connectedComponentsWithStats函数进行连通域标记,最后用矩形框标记出每个连通域。
阅读全文