对所给图片进行二值化处理和其他处理,扣出小狗图像并展示,opencv3,C++
时间: 2024-05-14 14:17:07 浏览: 11
好的,针对您的问题,我可以提供如下代码示例,实现对图像的二值化处理和提取小狗图像。代码基于OpenCV 3和C语言编写。
```c
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
// 打开图像文件
Mat image;
image = imread("test.jpg", 1);
if ( !image.data )
{
printf("No image data \n");
return -1;
}
// 转为灰度图
Mat grayImage;
cvtColor(image, grayImage, COLOR_BGR2GRAY);
// 二值化处理
Mat binaryImage;
threshold(grayImage, binaryImage, 100, 255, THRESH_BINARY);
// 寻找轮廓
std::vector<std::vector<Point>> contours;
findContours(binaryImage, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 遍历轮廓
for (size_t i = 0; i < contours.size(); i++)
{
double area = contourArea(contours[i]);
if (area > 1000) // 根据图像大小调整阈值
{
// 绘制矩形框
Rect rect = boundingRect(contours[i]);
rectangle(image, rect, Scalar(0, 255, 0), 2);
}
}
// 显示结果
namedWindow("Display Image", WINDOW_NORMAL);
imshow("Display Image", image);
waitKey(0);
return 0;
}
```
这段代码实现了以下功能:
1. 打开名为 "test.jpg" 的图像文件;
2. 将图像转为灰度图;
3. 对灰度图进行二值化处理;
4. 寻找图像中的轮廓;
5. 根据轮廓大小提取小狗图像并绘制矩形框;
6. 显示结果图像。
请注意,代码中的阈值和参数可能需要根据实际情况进行调整。