c++ 图像blur源码
时间: 2023-08-16 12:05:17 浏览: 106
以下是一个简单的C++图像模糊(blur)的实现,使用了OpenCV库:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读取图像
Mat image = imread(argv[1]);
// 模糊处理
Mat blurImage;
blur(image, blurImage, Size(5, 5));
// 显示原图和处理后的图像
imshow("Original Image", image);
imshow("Blur Image", blurImage);
waitKey();
return 0;
}
```
该代码中使用了`blur()`函数对图像进行模糊处理,第一个参数是输入图像,第二个参数是输出图像,第三个参数是模糊核的大小。在本例中,使用了一个5x5的模糊核。你可以根据需要调整模糊核的大小。
请注意,该代码仅适用于处理静态图像。如果需要处理视频流或实时图像,需要使用不同的代码实现。
相关问题
实现canny算子的C++源码
以下是实现 Canny 算子的 C++ 源码:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("lena.jpg", IMREAD_GRAYSCALE); // 读取灰度图像
// 高斯滤波
Mat blurImg;
GaussianBlur(img, blurImg, Size(5, 5), 1.4);
// Canny 边缘检测
Mat cannyImg;
Canny(blurImg, cannyImg, 50, 150);
imshow("Original Image", img);
imshow("Canny Edge Detection", cannyImg);
waitKey(0);
return 0;
}
```
注意,在使用 OpenCV 中的 Canny 函数之前,需要对图像进行高斯滤波处理,以减少噪声对边缘检测的影响。此外,Canny 函数还需要设置两个阈值参数,分别用于控制边缘的强度和连续性。
c++汉字骨架线提取源码
以下是一个基于边缘检测的汉字骨架线提取的C++源码示例,供参考:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
// 边缘检测函数
void CannyEdgeDetection(Mat& src, Mat& dst, int threshold1, int threshold2)
{
Mat src_gray;
cvtColor(src, src_gray, COLOR_BGR2GRAY);
blur(src_gray, src_gray, Size(3, 3));
Canny(src_gray, dst, threshold1, threshold2, 3, false);
}
// 骨架提取函数
void SkeletonExtraction(Mat& src, Mat& dst)
{
dst = Mat::zeros(src.size(), CV_8UC1);
Mat skel(src.size(), CV_8UC1, Scalar(0));
Mat temp;
Mat eroded;
Mat element = getStructuringElement(MORPH_CROSS, Size(3, 3));
bool done;
do
{
erode(src, eroded, element);
dilate(eroded, temp, element);
subtract(src, temp, temp);
bitwise_or(skel, temp, skel);
eroded.copyTo(src);
done = (countNonZero(src) == 0);
} while (!done);
dst = skel;
}
int main()
{
// 读取图像
Mat src = imread("chinese-character.jpg");
if (src.empty())
{
return -1;
}
// 边缘检测
Mat edge;
CannyEdgeDetection(src, edge, 50, 150);
// 骨架提取
Mat skel;
SkeletonExtraction(edge, skel);
// 显示结果
imshow("Original Image", src);
imshow("Edge Image", edge);
imshow("Skeleton Image", skel);
waitKey();
return 0;
}
```
该示例中使用了OpenCV库中的Canny边缘检测和骨架提取函数,通过对输入图像进行边缘检测,然后对边缘进行骨架提取,得到汉字的骨架线,最后将结果显示出来。需要注意的是,该示例中只适用于二值化图像,如果需要处理彩色图像,需要先将图像转换为灰度图像,并进行二值化处理。
阅读全文