(轉)Opencv卷積操作

來源:互聯網
上載者:User

標籤:

轉自:http://www.2cto.com/kf/201312/267308.html

Mask Operation filter2D函數 Last Edit 2013/12/24 所謂的Mask Operation就是濾波。 第一步:建立Mask:

?
123 Mat kern = (Mat_<char>(3,3) <<  0, -10,                                -15, -1,                                0, -10);</char>


Mat_是一個模板,建立了一個3*3的矩陣,矩陣的值在-128~127. 
第二步:使用filter2D. 函數原型:

?
12345678 void filter2D(InputArray src, //要進行濾波的映像              OutputArray dst,//濾波後的映像              int ddepth,     //原映像的深度  src.depth()              InputArray kernel, //第一步建立的Mask              Point anchor=Point(-1,-1),//Mask的中心點              double delta=0, //Optional value added to the filtered pixels before storing them in dst              int borderType=BORDER_DEFAULT               )
?
1 filter2D(I, K, I.depth(), kern );


以下是OpenCV2.0提供的sample:

?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 #include <opencv2 core="" core.hpp="">#include <opencv2 highgui="" highgui.hpp="">#include <opencv2 imgproc="" imgproc.hpp="">#include <iostream> using namespace std; using namespace cv; void help(char* progName){    cout << endl         <<  "This program shows how to filter images with mask: the write it yourself and the"        << "filter2d way. " << endl        <<  "Usage:"                                                                        << endl        << progName << " [image_name -- default lena.jpg] [G -- grayscale] "        << endl << endl;}  void Sharpen(const Mat& myImage,Mat& Result); int main( int argc, char* argv[]){    help(argv[0]);    const char* filename = argc >=2 ? argv[1] : "lena.jpg";     Mat I, J, K;     if (argc >= 3 && !strcmp("G", argv[2]))        I = imread( filename, CV_LOAD_IMAGE_GRAYSCALE);    else        I = imread( filename, CV_LOAD_IMAGE_COLOR);     namedWindow("Input", CV_WINDOW_AUTOSIZE);    namedWindow("Output", CV_WINDOW_AUTOSIZE);     imshow("Input", I);    double t = (double)getTickCount();         Sharpen(I, J);          t = ((double)getTickCount() - t)/getTickFrequency();    cout << "Hand written function times passed in seconds: " << t << endl;     imshow("Output", J);    cvWaitKey(0);     Mat kern = (Mat_<char>(3,3) <<  0, -10,                                    -15, -1,                                    0, -10);    t = (double)getTickCount();    filter2D(I, K, I.depth(), kern );     t = ((double)getTickCount() - t)/getTickFrequency();    cout << "Built-in filter2D time passed in seconds:      " << t << endl;     imshow("Output", K);     cvWaitKey(0);    return 0; }void Sharpen(const Mat& myImage,Mat& Result){    CV_Assert(myImage.depth() == CV_8U);  // accept only uchar images     const int nChannels = myImage.channels();    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);         for(int i= nChannels;i < nChannels*(myImage.cols-1); ++i)        {            *output++ = saturate_cast<uchar>(5*current[i]                          -current[i-nChannels] - current[i+nChannels] - 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));}</uchar></uchar></uchar></uchar></uchar></char></iostream></opencv2></o

(轉)Opencv卷積操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.