把上面的代码用C++20和opencv写出来
时间: 2023-12-03 19:43:10 浏览: 44
以下是使用C++20和OpenCV库编写的代码,实现了在图像中绘制矩形框并将结果显示出来:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
// 读入图像文件
Mat img = imread("test.jpg");
// 定义矩形框的位置和大小
Rect rect(50, 50, 100, 100);
// 在图像中绘制矩形框
rectangle(img, rect, Scalar(0, 0, 255), 2);
// 显示结果
imshow("result", img);
waitKey(0);
return 0;
}
```
在这段代码中,我们首先使用`imread`函数读入一张图像文件,然后定义一个矩形框的位置和大小。接着,使用`rectangle`函数在图像中绘制这个矩形框,其中第一个参数是图像,第二个参数是矩形框的位置和大小,第三个参数是颜色(这里我们选用红色),第四个参数是线宽。最后,使用`imshow`函数将结果显示出来,并使用`waitKey`函数等待按键输入。
相关问题
用opencv和c++写一个识别禁止直行交通标志
首先,我们需要准备一张禁止直行交通标志的图片,并使用OpenCV读取该图片。然后,我们需要对该图片进行预处理,以便我们可以更好地识别该交通标志。
预处理包括以下步骤:
1. 将图片转换为灰度图像,以便我们可以更好地处理图像。
2. 对灰度图像进行高斯滤波,以减少噪声。
3. 对图像进行二值化,以便我们可以更好地检测图像中的特征。
4. 对图像进行形态学操作,以进一步减少噪声并增强特征。
接下来,我们需要使用OpenCV中的Hough圆变换来检测图像中的圆形特征,从而识别交通标志。
代码如下:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char* argv[]) {
// 读取图像
Mat src = imread("no_entry.jpg", IMREAD_COLOR);
// 将图像转换为灰度图像
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
// 对灰度图像进行高斯滤波
Mat blur;
GaussianBlur(gray, blur, Size(3, 3), 0);
// 对图像进行二值化
Mat thresh;
threshold(blur, thresh, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);
// 对图像进行形态学操作
Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(5, 5));
morphologyEx(thresh, thresh, MORPH_OPEN, kernel, Point(-1, -1), 2);
// 使用Hough圆变换检测圆形特征
vector<Vec3f> circles;
HoughCircles(thresh, circles, HOUGH_GRADIENT, 1, thresh.rows / 8, 200, 100, 0, 0);
// 如果检测到圆形特征,则认为识别到了交通标志
if (circles.size() > 0) {
cout << "Found no entry sign!" << endl;
}
else {
cout << "No no entry sign found." << endl;
}
return 0;
}
```
在上面的代码中,我们首先读取了一张图像,并对其进行预处理。然后,我们使用Hough圆变换来检测圆形特征,并根据检测结果判断是否识别到了交通标志。
需要注意的是,这只是一个简单的示例,实际上,识别交通标志需要更加复杂的算法和更多的训练数据。但是上面的代码可以作为一个起点,帮助你了解如何使用OpenCV和C++来识别交通标志。
写一段上面代码的C++版本
好的,以下是上面 Python 代码的 C++ 版本:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读入图像,转换为灰度图像,并进行二值化处理
Mat img = imread("example.png");
Mat gray, thresh;
cvtColor(img, gray, COLOR_BGR2GRAY);
threshold(gray, thresh, 127, 255, THRESH_BINARY);
// 找到图像中所有轮廓,并绘制出来
std::vector<std::vector<Point>> contours;
std::vector<Vec4i> hierarchy;
findContours(thresh, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
drawContours(img, contours, -1, Scalar(0,255,0), 2);
// 对于每个轮廓,计算面积和颜色平均值,并确定色相范围
for (int i = 0; i < contours.size(); i++) {
double area = contourArea(contours[i]);
Scalar mean_val = mean(img, thresh);
Mat hsv;
cvtColor(Mat(1, 1, CV_8UC3, mean_val), hsv, COLOR_BGR2HSV);
int h = hsv.at<Vec3b>(0,0)[0];
int lower_h = h - 10;
int upper_h = h + 10;
Scalar lower = Scalar(lower_h, 50, 50);
Scalar upper = Scalar(upper_h, 255, 255);
Mat mask;
inRange(cvtColor(img, mask, COLOR_BGR2HSV), lower, upper, mask);
int color_pixels = countNonZero(mask);
// 计算颜色百分比并输出
double color_percent = (color_pixels / area) * 100;
std::cout << "Contour area: " << area << std::endl;
std::cout << "Color mean: " << mean_val << std::endl;
std::cout << "Color percent: " << color_percent << std::endl;
}
imshow("image", img);
waitKey(0);
destroyAllWindows();
return 0;
}
```
请注意,由于 OpenCV 的 C++ 接口与 Python 接口有所不同,因此代码结构和语法可能略有不同,但算法流程与 Python 版本基本相同。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)