opencv实现双边滤波 + 锐化
2017-11-28 16:11
483 查看
opencv实现双边滤波 + 锐化代码:void sharpen(const cv::Mat image, cv::Mat &result){result.create(image.size(), image.type());for (int j = 1; j < image.rows - 1; j++){const uchar* previous = image.ptr<const uchar>(j - 1);const uchar* current = image.ptr<const uchar>(j);const uchar* next = image.ptr<const uchar>(j + 1);uchar* output = result.ptr<uchar>(j);for (int i = 1; i < image.cols - 1; i++){//sharpened_pixel = 5*current-left-right-up-down; //cv::saturate_cast用以对计算结果进行截断(0-255) *output++ = cv::saturate_cast<uchar>(5 * current[i] - current[i - 1]- current[i + 1] - previous[i] - next[i]);}}result.row(0).setTo(cv::Scalar(0));result.row(result.rows - 1).setTo(cv::Scalar(0));result.col(0).setTo(cv::Scalar(0));result.col(result.cols - 1).setTo(cv::Scalar(0));}int main(int argc, char* argv[]) {/*IplImage *src = cvLoadImage("E:\\IR1024.bmp", -1);cvShowImage("ty", src);int a;a=src->nChannels;cvWaitKey(0);printf("channel is %d:",a);*/Mat img;img= imread("E:\\butterfly_GT.bmp");cv::cvtColor(img, img, CV_BGR2GRAY);Mat resultoffilter;bilateralFilter(img, resultoffilter, 10, 10 * 2, 10 / 2);Mat result;result.create(resultoffilter.size(), resultoffilter.type());sharpen(resultoffilter, result);namedWindow("sharpen");namedWindow("img");imshow("img", resultoffilter); cvtColor(result, result, CV_GRAY2RGB);imshow("sharpen", result);cv::imwrite("E:\\IR1024.bmp", result);waitKey(0);system("pause");return 0;}注意:(1)cv::saturate_cast用以对计算结果进行截断,对数值的数学计算常常超出允许的计算范围,解决方案是直接映射到(0-255)(2)row和col方法。返回一个特殊的、仅包含一行或一列的cv::Mat实例。在这个过程中没有任何的数据拷贝,如果该一维矩阵遭到修改也会相应的修改原始图像。(3)setTo函数将矩阵的所有元素设为指定值。
因为是图像第一行,最后一行,第一列,最后一列没处理,将其置为0
result.row(0).setTo(cv::Scalar(0));
result.row(result.rows - 1).setTo(cv::Scalar(0));
result.col(0).setTo(cv::Scalar(0));
result.col(result.cols - 1).setTo(cv::Scalar(0));将图像的第一行的所有像素设置为0.三通道的图像,需要使用cv::Scalar(a,b,c)来指定像素三个通道的目标值。
相关文章推荐
- OpenCV学习十:图片的模糊(双边滤波、中值滤波、高斯滤波等等)以及锐化算子
- 双边滤波--OpenCV实现
- 方框滤波,高斯滤波,中值滤波,双边滤波,opencv实现
- 图像平滑技术之核算子、均值滤波、中值滤波、高斯滤波、双边滤滤、导向滤波的原理概要及OpenCV代码实现
- 双边滤波--OpenCV实现
- Sobel滤波,Laplace滤波介绍与opencv实现
- 目标跟踪之粒子滤波---Opencv实现粒子滤波算法
- openCV之中值滤波&均值滤波(及代码实现)
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- Opencv cvSmooth 双边滤波 参数设置未解决问题
- opencv 实现导向滤波
- python3 利用opencv 添加中值滤波,均值滤波,高斯滤波,高斯双边滤波
- 引导图滤波(Guided Image Filtering)原理以及OpenCV实现
- 【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
- 5基于opencv的非线性滤波(中值滤波_双边滤波)
- 各项异性扩散滤波 -- OpenCV实现
- 引导滤波的OpenCV实现
- [学习opencv]高斯、中值、均值、双边滤波
- opencv实现图像邻域均值滤波、中值滤波、高斯滤波
- 双边滤波(bilateral filter)灰度图 matlab实现代码