c++创建一个黑色的圆形MAT
时间: 2024-03-01 18:54:50 浏览: 22
好的,下面是创建一个黑色圆形MAT的C++代码:
```c++
#include <opencv2/opencv.hpp>
int main() {
// 创建一个黑色的圆形MAT
cv::Mat img = cv::Mat::zeros(300, 300, CV_8UC1);
cv::circle(img, cv::Point(150, 150), 100, cv::Scalar(255, 255, 255), -1);
cv::imshow("Black Circle", img);
cv::waitKey(0);
return 0;
}
```
这段代码使用`cv::Mat::zeros`创建了一个300x300的黑色MAT,然后使用`cv::circle`在MAT中心绘制了一个半径为100的白色圆形,并将其填充。最后使用`cv::imshow`显示结果。
希望这个回答能够解决你的问题。
相关问题
如何用c++ opencv画个日晕
以下是使用C++和OpenCV库来绘制日晕的基本步骤:
1. 创建一个黑色背景的空白图像。
2. 选择一个中心点,将其设置为白色。这个中心点将是日晕的核心。
3. 使用一定的半径绘制一系列圆形,从中心点开始,每个圆形都比上一个圆形大一些。每个圆形的颜色逐渐变浅,从白色到黄色、橙色、红色等。
4. 重复步骤3,直到达到所需的直径或颜色变化。
5. 最后,将图像进行模糊处理,以使其看起来更真实。
下面是一个简单的示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 创建一个空白的黑色图像
Mat img(500, 500, CV_8UC3, Scalar(0, 0, 0));
// 设置中心点
Point center(img.cols / 2, img.rows / 2);
// 将中心点设置为白色
circle(img, center, 10, Scalar(255, 255, 255), -1);
// 绘制圆形
int radius = 20;
for (int i = 0; i < 10; i++)
{
// 计算当前圆形的颜色
int color_value = 255 - i * 20;
Scalar color(color_value, color_value, color_value);
// 绘制圆形
circle(img, center, radius, color, 2);
// 增加半径
radius += 20;
}
// 模糊处理图像
GaussianBlur(img, img, Size(15, 15), 0);
// 显示图像
imshow("Sunburst", img);
waitKey(0);
return 0;
}
```
这段代码将创建一个500x500的黑色图像,并在中心点绘制一个白色点。然后,它将绘制一系列圆形,每个圆形比上一个圆形大一些,颜色也逐渐变浅。最后,它将对图像进行模糊处理,以使其看起来更真实。
利用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;
}
```