利用opencv和C++截取图片的圆形区域
时间: 2023-06-19 22:04:40 浏览: 339
Opencv在C++上运行视频和图片操作
可以使用OpenCV的函数`cv::circle`和`cv::Mat::copyTo`来实现截取图片的圆形区域。
以下是实现的步骤:
1.读取需要截取的图片,将其转换为灰度图像。
```cpp
cv::Mat src = cv::imread("image.jpg");
cv::Mat gray;
cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);
```
2.设置圆心坐标和半径大小。
```cpp
cv::Point center(src.cols / 2, src.rows / 2); // 圆心坐标
int radius = std::min(src.cols, src.rows) / 2; // 半径大小
```
3.创建掩码图像,将圆形区域设为白色,其余区域设为黑色。
```cpp
cv::Mat mask(gray.size(), CV_8UC1, cv::Scalar(0)); // 创建掩码图像,初始为黑色
cv::circle(mask, center, radius, cv::Scalar(255), -1); // 将圆形区域设为白色
```
4.通过掩码图像将圆形区域截取出来,保存为新的图像。
```cpp
cv::Mat dst;
gray.copyTo(dst, mask); // 通过掩码图像将圆形区域截取出来
cv::imwrite("circle.jpg", dst); // 保存为新的图像
```
完整代码如下:
```cpp
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat src = cv::imread("image.jpg");
cv::Mat gray;
cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);
cv::Point center(src.cols / 2, src.rows / 2);
int radius = std::min(src.cols, src.rows) / 2;
cv::Mat mask(gray.size(), CV_8UC1, cv::Scalar(0));
cv::circle(mask, center, radius, cv::Scalar(255), -1);
cv::Mat dst;
gray.copyTo(dst, mask);
cv::imwrite("circle.jpg", dst);
return 0;
}
```
阅读全文