学习《OpenCV 2 计算机视觉编程手册》第二章遍历图像和领域操作实例——对图像进行锐化
2017-05-13 21:34
656 查看
遍历图像和领域操作实例——对图像进行锐化
对图像进行锐化,用一幅图像减去它经过拉斯滤波之后的图像,该图像的边缘部分将放大,即细节部分更加锐利,该拉普拉斯算子的计算公式:增强后的像素值=5*当前像素-左边像素-右边像素-上方像素-下方像素;
实现方法1如下:
以上两个锐化函数,在main()函数中实现如下:
它们两实现的效果一样:
原图:(灰度图)
锐化之后:
对图像进行锐化,用一幅图像减去它经过拉斯滤波之后的图像,该图像的边缘部分将放大,即细节部分更加锐利,该拉普拉斯算子的计算公式:增强后的像素值=5*当前像素-左边像素-右边像素-上方像素-下方像素;
实现方法1如下:
//拉普拉斯算子:用一幅图像减去它经过拉斯滤波之后的图像,该图像的边缘部分将放大,即细节部分更加锐利, //该拉普拉斯算子的计算公式:增强后的像素值=5*current-left-right-up-down;都是像素运算 void Sharpern1(const Mat &img,Mat &result) { //创建一个result存入处理Img之后的图像矩阵 result.create(img.size(),img.type()); for (int j = 1; j < img.rows-1; j++)//处理除了第一行和最后一行之外的所有行 { const uchar* pre=img.ptr<uchar>(j-1);//上一行的首地址 const uchar* cur=img.ptr<uchar>(j);//当前行首地址 const uchar* next=img.ptr<uchar>(j+1);//下一行 //输出行的首地址 uchar * output=result.ptr<uchar>(j); //当前行中每列元素(不包括第一列和最后一列) for (int i = 1; i < img.cols-1; i++) { //saturate_cast<uchar>()函数是将()中的值控制中uchar范围0~255之间,超出的截断 *output++=cv::saturate_cast<uchar>(5*cur[i]-pre[i]-next[i]-cur[i-1]-cur[i+1]); } } //将未处理的像素设置为0 result.row(0).setTo(Scalar(0)); result.row(result.rows-1).setTo(Scalar(0)); result.col(0).setTo(Scalar(0)); result.col(result.cols-1).setTo(Scalar(0)); }实现方法2如下:
//利用Opencv自带的filter2D函数改进上面锐化函数,filter2D函数需要图像,核等作为参数 //需要自己定义一个3*3的核,(大小可以改) //3*3的核 // 0 -1 0 // -1 5 -1 // 0 -1 0 void Sharpern2D(Mat &img,Mat &result) { //初始化3*3的核矩阵为0 Mat kernel(3,3,CV_32FC1,cv::Scalar(0)); //对核元素进行赋值 kernel.at<float>(1,1)=5.0; kernel.at<float>(0,1)=-1.0; kernel.at<float>(1,0)=-1.0; kernel.at<float>(2,1)=-1.0; kernel.at<float>(1,2)=-1.0; //可直接使用Opencv自带的filter2D()函数,前提是要引用imgproc.hpp头文件,关于图像处理的 cv::filter2D(img,result,img.depth(),kernel,Point(-1,-1)); }
以上两个锐化函数,在main()函数中实现如下:
int main() { Mat img=imread("img/logo.png",0); Mat result; namedWindow("原图像"); imshow("原图像",img); Sharpern2D(img,result); if(!result.empty()) { namedWindow("锐化图像"); imshow("锐化图像",result); } waitKey(); return 0; }
它们两实现的效果一样:
原图:(灰度图)
锐化之后:
相关文章推荐
- 学习《OpenCV 2 计算机视觉编程手册》第二章---使用指针遍历图像案例
- 学习《OpenCV 2 计算机视觉编程手册》第二章存取像素值案例--椒盐噪声
- 《Opencv 2计算机视觉编程手册 》学习笔记 1
- [OpenCv2 计算机视觉编程手册] 第六章 图像滤波
- OpenCV2计算机视觉应用编程手册(自学版)初级四
- Qt 5.3 下OpenCV 2.4.11 开发(6)遍历图像和领域操作
- OpenCV2编程手册笔记之 5.2形态学滤波对图像进行腐蚀、膨胀运算
- OpenCV2计算机视觉应用编程手册(自学版)初级五
- 计算机视觉与图像处理学习笔记(二)win32+mingw+opencv搭建
- Opencv学习笔记(四)--图像处理平滑,锐化操作
- OpenCV 图像处理 计算机视觉 深度学习 优秀博主推荐
- 【OpenCV学习笔记】【编程实例】二(图像的旋转和翻转)
- opencv2学习笔记4-操作图像(图像锐化-拉普拉斯算子)
- 3_opencv2计算机视觉学习_基于类的图像处理
- opencv学习笔记(3) 锐化图像 邻域操作 ROI
- OpenCV2计算机视觉应用编程手册(自学版)初级二
- 《OpenCV2 计算机视觉编程手册》视频处理三
- 2_opencv2计算机视觉学习_操作像素
- OpenCV2计算机视觉应用编程手册(自学版)初级六
- opencv2 计算机视觉编程手册 estimateF.cpp