Opencv中circle函数画离散的直线或者圆

本文详细介绍了cvCircle函数,这是OpenCV中用于绘制圆形的重要函数。文章解释了函数的定义、参数及其作用,包括图像、圆心坐标、半径、颜色等,并提供了具体的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Circle,中文含义指:即圆形。cvCircle是指绘制圆形的一个程序函数。
定义
void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int line_type=8, int shift=0 );

参数                          图像             圆心坐标     半径              线条的颜色
thickness 如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充
line_type 线条的类型。见 cvLine 的描述
shift 圆心坐标点和半径值的小数点位数
 

使用:

cv::circle(img,Point(10,10),8,CV_RGB(0,0,0),2);

比如用CV_RGB(255, 0,0)设置为红色, CV_RGB(255, 255,255)设置为白色,CV_RGB(0, 0,0)设置为黑色

### 使用 OpenCV 实现低通滤波器 为了在 OpenCV 中实现类似于 MATLAB 的 `lowpassfilter` 功能,可以采用多种方法。一种常见的做法是利用傅里叶变换来设计和应用低通滤波器。 #### 方法一:使用 DFT 和 IDFT 进行频域处理 通过离散傅里叶变换 (DFT),可以在频率域内创建一个形的低通滤波掩模,并将其应用于图像。之后再执行逆离散傅里叶变换 (IDFT) 将结果转换回空间域。 ```cpp #include <opencv2/opencv.hpp> using namespace cv; using namespace std; void applyLowPassFilter(const Mat& inputImage, Mat& outputImage, int d0) { // Convert image to float and do the fourier transform Mat padded; //expand input image to optimal size int m = getOptimalDFTSize(inputImage.rows); int n = getOptimalDFTSize(inputImage.cols); copyMakeBorder(inputImage, padded, 0, m - inputImage.rows, 0, n - inputImage.cols, BORDER_CONSTANT, Scalar::all(0)); Mat planes[] = {Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F)}; Mat complexI; merge(planes, 2, complexI); // Add to the expanded another plane with zeros dft(complexI, complexI); // this way the result may fit in the source matrix // Create a mask for Low Pass Filter Mat padMask = Mat::ones(m, n, CV_32F); Point center = Point(padMask.cols / 2, padMask.rows / 2); circle(padMask, center, d0, Scalar(0), -1, LINE_AA); split(complexI, planes); // planes[0] = Re(DFT(I)), planes[1] = Im(DFT(I)) magnitude(planes[0], planes[1], planes[0]);// planes[0] = magnitude Mat magI = planes[0]; // Apply Mask by multiplication multiply(magI, padMask, magI); // Compute the inverse DFTs of the result idft(complexI, complexI); split(complexI, planes); // planes[0] = Re(DFT(I)), planes[1] = Im(DFT(I)) // Crop the outcome back to the original size magI = planes[0](Rect(0, 0, inputImage.cols, inputImage.rows)); normalize(magI, outputImage, 0, 1, NORM_MINMAX); // Transform the matrix with float values into the // viewable image form (float between values 0 and 1). } ``` 此代码片段展示了如何构建一个简单的理想型形单位脉冲响应的低通滤波器[^1]。 #### 方法二:使用 GaussianBlur 函数模拟低通效果 另一种更简单的方法就是直接调用 OpenCV 提供的 `GaussianBlur()` 函数,它本质上就是一个平滑操作,能够起到类似的效果: ```cpp cv::Mat src = ... ;// 输入图片 cv::Mat dst; int ksize_width = 7; // Kernel width must be positive odd number. int ksize_height = 7; // Kernel height must be positive odd number. double sigmaX = 0; // Standard deviation in X direction. GaussianBlur(src, dst, Size(ksize_width,ksize_height),sigmaX ); imshow("Blurred Image",dst); waitKey(); ``` 这种方法不需要显式的频谱分析过程,在实际应用中更为简便高效[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值