QT+opencv 绘制轮廓后 按照轮廓取图
时间: 2024-10-15 16:14:22 浏览: 54
QT5+opencv对图像区域内圆的颜色识别
在QT中结合OpenCV进行轮廓检测并根据轮廓提取图片区域,可以按照以下步骤进行:
1. 首先,确保已经安装了必要的库,包括OpenCV (`opencv2`) 和 Qt 的绑定(如 `qt_opencv` 或者直接集成到项目中)。
2. **加载图像**:
```cpp
cv::Mat image = cv::imread("input_image.jpg", cv::IMREAD_COLOR);
```
3. **预处理图像**:
可能需要调整大小、灰度化、二值化等操作,以便于后续的轮廓检测。例如,二值化操作:
```cpp
cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);
cv::threshold(grayImage, binaryImage, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
```
4. **轮廓检测**:
```cpp
std::vector<std::vector<cv::Point>> contours;
cv::findContours(binaryImage, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
```
5. **遍历轮廓并提取区域**:
对每个轮廓,使用`boundingRect`函数获取其边界框,然后从原始图像中裁剪出这个区域:
```cpp
for (const auto& contour : contours) {
cv::Rect rect = cv::boundingRect(contour);
cv::Mat croppedRegion = image(rect);
// 现在croppedRegion就是对应轮廓的图像部分
}
```
6. **将结果保存或显示**:
如果你想在Qt界面上显示,可以把`cv::Mat`转换成`QImage`,然后使用`QGraphicsView`或`QLabel`显示:
```cpp
QImage qi(croppedRegion.data, croppedRegion.cols, croppedRegion.rows, cv::mat::channels()*croppedRegion.cols, QImage::Format_RGB888);
QLabel *label = new QLabel(this);
label->setPixmap(QPixmap::fromImage(qi));
```
阅读全文