opencv单通道图像画圆圈 c++
时间: 2023-11-17 18:00:26 浏览: 158
可以使用OpenCV中的cv::circle函数来画圆圈。该函数需要传入以下参数:图像、圆心坐标、半径、颜色和线宽。下面是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 创建单通道图像
Mat img(500, 500, CV_8UC1, Scalar(0));
// 画圆圈
Point center(250, 250);
int radius = 100;
Scalar color(255);
int thickness = 2;
circle(img, center, radius, color, thickness);
// 显示图像
imshow("Circle", img);
waitKey(0);
return 0;
}
```
相关问题
c++ opencv 气泡
### 使用 C++ 和 OpenCV 实现气泡效果图像处理
为了创建气泡效果,可以采用多种方法来模拟水下气泡的视觉特征。一种常见的做法是在图像上绘制透明圆形区域并调整其亮度和对比度,从而形成类似气泡的效果。
以下是具体实现方式:
#### 创建气泡效果的主要步骤
1. **读取原始图片**
2. **生成随机位置和大小的圆圈作为气泡中心**
3. **在这些位置应用高斯模糊以模仿气泡表面反射光斑**
4. **增加局部亮度使气泡看起来更明亮**
下面是一个完整的C++程序示例,展示了如何利用OpenCV库完成上述操作:
```cpp
#include <opencv2/opencv.hpp>
#include <cstdlib> // For rand()
using namespace cv;
using namespace std;
void addBubbleEffect(Mat& img){
RNG rng(12345); // 随机数发生器
int numBubbles = 50; // 设置要添加的气泡数量
for(int i=0;i<numBubbles;++i){
Point center(rng.uniform(0,img.cols),rng.uniform(0,img.rows));
double radius = rng.uniform(img.cols*0.01, min(img.cols*0.08, img.rows*0.08));
Mat bubbleMask = Mat::zeros(img.size(), CV_8UC1);
circle(bubbleMask,center,radius,Scalar(255,-1));
GaussianBlur(bubbleMask,bubbleMask,Size(radius*2+1,radius*2+1),radius);
vector<Mat> channels;
split(img,channels); // 将彩色图分为三个单通道
for(size_t c=0;c<channels.size();++c){
Mat channelWithAlpha;
multiply(channels[c],bubbleMask*(1./255.),channelWithAlpha);
channels[c]=channelWithAlpha+bubbleMask*(rand()%100)/255.;
}
merge(channels,img); // 合成回原图
}
}
int main(){
string filename="input.jpg";
Mat srcImg = imread(filename,CV_LOAD_IMAGE_COLOR);
if(srcImg.empty()){
cout << "Could not open or find the image" << endl ;
return -1;
}
namedWindow("Original Image", WINDOW_AUTOSIZE );
imshow("Original Image",srcImg );
addBubbleEffect(srcImg);
namedWindow("Image with Bubble Effect",WINDOW_AUTOSIZE );
imshow("Image with Bubble Effect",srcImg );
waitKey(0);
}
```
此代码片段实现了向给定输入图像中加入多个随机分布的小气泡的功能[^1]。通过调节`numBubbles`, `minRadius`, 及其他参数可改变最终呈现出来的气泡密度及其外观特性。
opencv-python原理
### OpenCV-Python工作原理深入解析
#### 1. 库结构与模块划分
OpenCV-Python 是一个强大的计算机视觉库,它基于 C++ 的 OpenCV 构建而成。该库提供了 Python 接口以便于快速开发和测试算法。其内部由多个子模块组成,涵盖了从基本图像操作到复杂机器学习模型训练的各种功能[^1]。
#### 2. 数据表示方式
在 OpenCV 中,图片通常被存储为 NumPy 数组形式的对象 `ndarray` 。这种数据结构允许高效地访问像素值以及执行矩阵运算。对于彩色图像来说,默认采用 BGR 颜色空间而非 RGB;而对于单通道灰度图,则只包含强度信息[^3]。
#### 3. 函数调用机制
当通过Python接口调用某个特定函数时(例如绘制圆形的`cv2.circle()`),实际上传递给底层C/C++ 实现的是经过封装后的参数列表。这些参数会被转换成适合原生API使用的格式,并最终触发相应的计算过程[^2]。
#### 4. 性能优化策略
为了确保良好的性能表现,OpenCV-Python 进行了一系列针对性的设计:
- **多线程支持**:利用现代CPU架构特点,在某些耗时较长的操作上启用并发处理;
- **SIMD指令集加速**:针对不同平台特性自动选择最优编译选项以充分利用硬件资源;
- **内存管理**:有效减少不必要的拷贝次数,降低开销的同时提高了程序运行效率。
```python
import cv2
import numpy as np
# 创建一个黑色背景画布
img = np.zeros((512, 512, 3), dtype=np.uint8)
# 绘制红色圆圈
cv2.circle(img, center=(256, 256), radius=100, color=(0, 0, 255), thickness=-1)
```
阅读全文
相关推荐











