opencv求轮廓面积的函数 C++实例
时间: 2024-03-21 11:13:48 浏览: 78
以下是使用OpenCV库中的函数计算轮廓面积的C语言示例:
```c
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("test.jpg");
cvtColor(img, img, COLOR_BGR2GRAY);
threshold(img, img, 128, 255, THRESH_BINARY);
vector<vector<Point> > contours;
findContours(img, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
for (int i = 0; i < contours.size(); i++)
{
double area = contourArea(contours[i]);
cout << "Contour " << i + 1 << " Area: " << area << endl;
}
return 0;
}
```
首先,加载测试图像并将其转换为灰度图像。然后,使用阈值函数将其二值化。接下来,使用findContours函数找到图像中的轮廓,并将其存储在contours向量中。最后,使用contourArea函数计算每个轮廓的面积,并将其打印到控制台上。
相关问题
opencv sobel函数应用实例C++
在OpenCV中,Sobel算子是一种常用的边缘检测工具,它用于计算图像梯度,也就是图像像素强度随位置变化的速度。C++中使用Sobel函数通常涉及以下步骤:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取图像
Mat src = imread("example.jpg", IMREAD_GRAYSCALE); // 假设图像名为"example.jpg"
if (src.empty()) {
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
// 定义Sobel操作的参数,这里默认的是3x3大小的核,方向为x轴(水平)或y轴(垂直)
Mat gradX, gradY; // 存储梯度结果
int dx = CV_Sobel(src, gradX, CV_8U, 1, 0, 3, 1, 0); // x轴方向
int dy = CV_Sobel(src, gradY, CV_8U, 0, 1, 3, 1, 0); // y轴方向
// 可以选择显示原图和梯度图
namedWindow("Original Image", WINDOW_NORMAL);
imshow("Original Image", src);
namedWindow("Gradient X", WINDOW_NORMAL);
imshow("Gradient X", gradX);
namedWindow("Gradient Y", WINDOW_NORMAL);
imshow("Gradient Y", gradY);
waitKey(0); // 等待用户按键
return 0;
}
```
在这个例子中,`dx`和`dy`分别存储了源图像在x和y轴方向的梯度,可以看到每个像素点的强度变化。你可以根据需要选择不同的方向(`CV_Sobel`支持x、y、xy和yx四个方向),以及核的大小。
opencv c++ mat 函数回传 程序实例
OpenCV (Open Source Computer Vision Library) 的 `Mat` 类是其核心数据结构,用于存储二维图像数据。当你从函数中获取到一个 `Mat` 对象时,通常会将其视为矩阵操作的基础。以下是一个简单的 C++ 示例,展示如何创建 `Mat`、分配内存并读取图像文件:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 引入OpenCV库
cv:: Mat src; // 创建一个空的Mat对象
// 读取图像文件
std::string imagePath = "path_to_your_image.jpg";
if (!cv::imread(imagePath, src)) { // 如果图片加载失败
std::cout << "Could not open or find the image." << std::endl;
return -1;
}
// 打印矩阵维度
int rows = src.rows;
int cols = src.cols;
std::cout << "Image size is: " << rows << "x" << cols << std::endl;
// 进行一些处理,例如显示原图
cv::imshow("Original Image", src);
cv::.waitKey(0); // 等待用户按键
// 回传处理后的结果
// 注意:这里假设你对src进行了处理,并将处理结果保存在一个新Mat对象dest中
cv::Mat dest = ...; // 替换为你的处理过程
// 回传dest(如果需要)
return 0;
}
```
在这个例子中,`imread()` 函数返回一个 `Mat` 对象,表示读取的图像。你可以对其进行进一步操作,如转换、裁剪等,然后在需要的地方返回处理后的 `Mat`。
阅读全文
相关推荐
















