c++ opencv多边形轮廓等距缩放
时间: 2023-11-15 09:05:40 浏览: 113
多边形轮廓等距缩放是指将多边形沿着其边缘向内或向外移动一定距离,从而得到一个新的多边形。在OpenCV中,可以使用cv::approxPolyDP函数来对多边形进行等距缩放。具体实现可以参考引用中提供的C++代码,将其转换为Java代码即可。需要注意的是,在使用OpenCV进行图像处理时,需要先安装OpenCV相关环境,具体安装方法可以参考引用中提供的博客。
相关问题
C++opencv获取轮廓中心
在C++中使用OpenCV库获取轮廓中心的方法如下:
1. 首先读取图像并进行预处理,例如二值化、平滑等。
2. 使用findContours函数找到图像中的轮廓并存储在一个vector容器中。
3. 对每个轮廓,使用moments函数计算其矩,并根据矩计算出轮廓中心坐标。
下面是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
// 读取图像并进行预处理
Mat src = imread("test.jpg");
Mat gray, binary;
cvtColor(src, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
imshow("binary", binary);
// 查找轮廓并存储
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
// 对每个轮廓计算中心坐标
Mat drawing = Mat::zeros(binary.size(), CV_8UC3);
for (size_t i = 0; i < contours.size(); i++)
{
// 计算轮廓的矩
Moments mu = moments(contours[i], false);
// 计算轮廓中心坐标
Point2f center(mu.m10 / mu.m00, mu.m01 / mu.m00);
// 绘制轮廓中心
circle(drawing, center, 5, Scalar(0, 0, 255), -1);
}
imshow("result", drawing);
waitKey(0);
return 0;
}
```
运行程序后,会显示原始图像和轮廓中心的绘制结果。
基于c++ opencv填充轮廓内部
要在C++ OpenCV中填充轮廓内部,可以使用cv::fillPoly函数。以下是一个示例代码:
```
// 创建一个黑色的图像
cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);
// 定义一个包含多边形顶点的vector
std::vector<std::vector<cv::Point>> contours;
contours.push_back({cv::Point(100, 100), cv::Point(300, 100), cv::Point(200, 300)});
// 在图像上绘制多边形
cv::drawContours(image, contours, 0, cv::Scalar(255, 255, 255), -1);
// 填充多边形内部
cv::fillPoly(image, contours, cv::Scalar(255, 0, 0));
// 显示图像
cv::imshow("Filled Contour", image);
cv::waitKey(0);
```
在上面的代码中,我们首先创建了一个黑色的图像,然后定义了一个包含一个多边形顶点的vector。接着,我们使用`cv::drawContours`函数在图像上绘制了多边形,并使用`cv::fillPoly`函数填充了多边形内部。最后,我们显示了填充后的图像。
注意,在使用`cv::fillPoly`函数时,需要提供包含多边形顶点的vector和填充颜色。如果要填充多个轮廓,请将轮廓添加到vector中,并在调用`cv::fillPoly`函数时传递整个vector。