opencv检测图片中的黑色方块,计算方块面积、位置信息并按照面积大小将这些信息存放在vector
时间: 2024-11-25 14:11:31 浏览: 53
mianji.rar_opencv_opencv 面积_水果轮廓面积的计算
OpenCV(Open Source Computer Vision Library)是一个广泛使用的计算机视觉库,用于处理图像和视频数据。要检测图片中的黑色方块,并计算它们的面积和位置,你可以使用以下步骤:
1. **读取图片**:
```cpp
cv::Mat img = cv::imread("path_to_your_image.jpg");
```
2. **转换为灰度图像**,以便更容易识别黑白色块:
```cpp
cv::cvtColor(img, gray_img, cv::COLOR_BGR2GRAY);
```
3. **阈值化**,将灰度图像转换为二进制,便于黑色区域检测:
```cpp
cv::threshold(gray_img, binary_img, 0, 255, cv::THRESH_BINARY_INV | cv::THRESH_OTSU);
```
4. **查找轮廓**,找到所有的黑色方块(这里假设黑色方块是封闭的形状):
```cpp
std::vector<std::vector<cv::Point>> contours;
cv::findContours(binary_img, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
```
5. **遍历轮廓并计算每个方块的属性**:
```cpp
std::vector<std::pair<int, std::vector<cv::Point>>> black_blocks;
for (const auto& contour : contours) {
cv::Rect bounding_rect = cv::boundingRect(contour);
int area = bounding_rect.area();
black_blocks.push_back(std::make_pair(area, contour));
}
```
6. **按照面积排序**:
```cpp
std::sort(black_blocks.begin(), black_blocks.end(), [](const auto& a, const auto& b) { return a.first < b.first; });
```
现在,`black_blocks` vector包含了按面积从大到小排列的方块信息,每条记录包含面积和对应的轮廓点。
阅读全文