学习OpenCV(三)

来源:互联网 发布:ppt mac破解版下载 编辑:程序博客网 时间:2024/06/14 14:14
/**本程序主要学习图像的简单的处理,过滤操作*第一种方法使用自己写的算法*第二种使用OpenCV自带的函数sharpen2D()*注意学习 自定义矩阵的方法*/#include "cv.h"#include "highgui.h"#include "..\..\..\..\..\..\opencv\build\include\opencv2\imgproc\imgproc.hpp"void sharpen1(cv::Mat image , cv::Mat &result){result.create(image.size() , image.type()) ;//Create的两种方法int tRows = image.rows ;int tcols = image.cols ;for(int i = 1 ; i < tRows - 1 ; ++ i){const uchar * pUp     = image.ptr<const uchar>(i - 1) ;const uchar * pCur    = image.ptr<const uchar>(i) ;const uchar * pDown   = image.ptr<const uchar>(i + 1) ;uchar * pOut = result.ptr<uchar>(i) ;for(int j = 1 ; j < tcols - 1 ; ++ j){pOut[j] = cv::saturate_cast<uchar>(5 * pCur[j] - pCur[j-1] - pCur[j+1] - pUp[j] - pDown[j]) ;}}result.row(0).setTo(cv::Scalar(0)) ;//注意这里row 和 col 与 rows 和 cols 的区别result.row(tRows - 1).setTo(cv::Scalar(0)) ;result.col(0).setTo(cv::Scalar(0)) ;result.col(tcols - 1).setTo(cv::Scalar(0)) ;}void shprpen2D(cv::Mat image , cv::Mat &result){cv::Mat kernel(3 , 3 , CV_32F , cv::Scalar(0)) ;kernel.at<float>(0 , 1) = -1;kernel.at<float>(1 , 0) = -1;kernel.at<float>(1 , 1) = 5 ;kernel.at<float>(1 , 2) = -1 ;kernel.at<float>(2 , 1) = -1;cv::filter2D(image , result , image.depth() , kernel) ;}int main(){cv::Mat image ;cv::Mat result ;image = cv::imread("D:/Development/OpenCV/images/boldt.jpg" , 0) ;cv::namedWindow("Original") ;cv::imshow("Original" , image) ;//sharpen1(image , result) ;shprpen2D(image , result) ;cv::namedWindow("Result") ;cv::imshow("Result" , result) ;cv::waitKey() ;return 0 ;}

0 0