拉普拉斯銳化掩碼濾波
阿新 • • 發佈:2018-12-11
拉普拉斯二階銳化 |0 |-1 |0 |-1|5|-1 | 0|-1 |0
#include "opencv2/opencv.hpp" #include <iostream> using namespace std; using namespace cv; //opencv mask(拉普拉斯銳化) //0 -1 0 //-1 5 -1 //0 -1 0 void sharp(const Mat& myImage, Mat& result) { CV_Assert(myImage.depth() == CV_8U); const int channels = myImage.channels(); cout << "channels= " << channels << endl; result.create(myImage.size(), myImage.type()); //創建於元素影象一樣型別的大小 for (int j = 1; j < myImage.rows - 1; ++j) { const uchar* previous = myImage.ptr<uchar>(j - 1); const uchar* current = myImage.ptr<uchar>(j); const uchar* next = myImage.ptr<uchar>(j + 1); uchar* output = result.ptr<uchar>(j);//指向輸出影象的第j行的指標 //內迴圈,按列掃描,此處相當於對每個通道單獨濾波 for (int i = channels; i < channels*(myImage.cols - 1); ++i) { //掩碼運算元,銳化,二維拉普拉斯 *output++ = saturate_cast<uchar>(6 * current[i] - current[i - channels] - current[i + channels] - previous[i] - next[i]); } } 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)); } int main() { Mat a; a = imread("../../lena_color.tif", IMREAD_COLOR); if (a.empty()) return - 1; imshow("original", a); Mat b; sharp(a, b); imshow("sharp", b); waitKey(0); return 0; }