opencv已经生成了矩形并且只对矩形区域中的图像做二值化处理C++例程
时间: 2024-02-01 18:14:06 浏览: 62
以下是使用OpenCV在矩形区域中对图像进行二值化处理的C++示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取图像
Mat image = imread("test.jpg");
// 定义矩形区域
Rect roi(100, 100, 200, 200);
Mat roiImg = image(roi);
// 将矩形区域中的图像转换为灰度图像
cvtColor(roiImg, roiImg, COLOR_BGR2GRAY);
// 对矩形区域中的图像进行二值化处理
threshold(roiImg, roiImg, 100, 255, THRESH_BINARY);
// 显示结果
imshow("Original Image", image);
imshow("ROI Image", roiImg);
waitKey(0);
return 0;
}
```
在此示例中,我们首先读取了一张图像,然后定义了一个矩形区域并从原始图像中提取该区域。接下来,我们将提取的图像转换为灰度图像,并对其进行二值化处理。最后,我们将原始图像和处理后的图像显示出来并等待用户按下任意键退出。
请注意,本示例中的阈值值为100,这意味着大于100的像素值将被设置为255(白色),小于或等于100的像素值将被设置为0(黑色)。您可以根据自己的需求更改此值。
相关问题
opencv只对图像中矩形区域做二值化处理C++例程
下面是一个使用 OpenCV 在图像中提取矩形区域并对其进行二值化处理的 C++ 例程:
```c++
#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
// 读取图像
cv::Mat image = cv::imread("example.jpg");
// 灰度化
cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
// 二值化
cv::Mat binary;
cv::threshold(gray, binary, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
// 查找轮廓
std::vector<std::vector<cv::Point>> contours;
cv::findContours(binary, contours, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE);
// 提取矩形区域
std::vector<cv::Rect> rects;
for (const auto& contour : contours) {
cv::Rect rect = cv::boundingRect(contour);
if (rect.width > 10 && rect.height > 10 && rect.width < image.cols && rect.height < image.rows) {
rects.push_back(rect);
}
}
// 对矩形区域进行二值化
for (const auto& rect : rects) {
cv::Mat roi = binary(rect);
cv::threshold(roi, roi, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
}
// 显示结果
cv::imshow("image", image);
cv::imshow("binary", binary);
cv::waitKey(0);
return 0;
}
```
这个例程中,我们首先读取了一张图像并将其转换成灰度图像。然后,我们使用 Otsu 自适应阈值算法对图像进行二值化处理。接下来,我们使用 `findContours` 函数查找图像中的轮廓,并使用 `boundingRect` 函数提取矩形区域。最后,我们对矩形区域进行二值化处理,并显示结果。
opencv只对图像中旋转矩形区域做图像处理C++例程
以下是一个示例代码,它使用OpenCV库对图像中的旋转矩形区域进行处理:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取图像
Mat img = imread("image.jpg");
// 定义旋转矩形区域
RotatedRect rect = RotatedRect(Point2f(100, 100), Size2f(200, 100), 30);
// 获取旋转矩形的四个顶点
Point2f vertices[4];
rect.points(vertices);
// 将旋转矩形区域转换为矩形
Rect boundingRect = rect.boundingRect();
// 在图像中绘制旋转矩形和矩形
line(img, vertices[0], vertices[1], Scalar(0, 255, 0), 2);
line(img, vertices[1], vertices[2], Scalar(0, 255, 0), 2);
line(img, vertices[2], vertices[3], Scalar(0, 255, 0), 2);
line(img, vertices[3], vertices[0], Scalar(0, 255, 0), 2);
rectangle(img, boundingRect, Scalar(255, 0, 0), 2);
// 显示图像
imshow("Image", img);
waitKey(0);
return 0;
}
```
该示例代码读取名为“image.jpg”的图像,定义一个旋转矩形区域,获取旋转矩形的四个顶点,并将旋转矩形区域转换为矩形。然后,它在图像中绘制旋转矩形和矩形,并显示图像。
你可以根据需要修改代码以进行其他图像处理操作,例如在旋转矩形区域内进行像素操作。
阅读全文