Go OpenCV convolution operation

Source: Internet
Author: User
Tags scalar

Transferred from: http://www.2cto.com/kf/201312/267308.html

Mask operation filter2d function last Edit 2013/12/24 the so-called mask operation is filtering. First step: Build Mask:

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


Mat_ is a template that establishes a 3*3 matrix, the value of the matrix in -128~127.
Step two: Use Filter2d. Function Prototypes:

?
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 );


The following is the sample provided by OpenCV2.0:

?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 666768697071727374757677787980818283848586 #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

Go OpenCV convolution operation

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.