基本的图像处理操作

1. Mask operation

官网

Mask操作的效果决定于其使用的Mask, 通過Mask在圖像上逐個像素的便利,得到當前像素的新的值.

比如增强对比度(銳化)的:

基本的图像处理操作_第1张图片

实现方法:

void Sharpen(const cv::Mat& myImage, cv::Mat& Result)
{
    CV_Assert(myImage.depth() == CV_8U);

    const int nChannels = myImage.channels();
    //注意create方法的使用,This is one of the key Mat methods. Most new-style OpenCV functions and methods that produce arrays call this method for each output array. 
    Result.create(myImage.size(), myImage.type());

    for(int j=1; j(j-1);
        const uchar* current = myImage.ptr(j);
        const uchar* next = myImage.ptr(j+1);

        uchar* output = Result.ptr(j);

        for(int i=nChannels; i(5*current[i] - \
                           current[i-nChannels] - current[i+nChannels] - previous[i] - next[i]);
        }
     }

    //注意對邊界上的像素的處理,當然不一定要設置爲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));

}

系統提供的對應的函數:

    cv::Mat kernel = (cv::Mat_(3, 3) << 0, -1, 0, \
                                             -1, 5, -1, \
                                              0, -1, 0);

    cv::filter2D(src, dst1, src.depth(), kernel);

2. Adding (blending) two images using OpenCV

linear blend operator

src1 and src2, they both have to be of the same size (width and height) and type.

beta = ( 1.0 - alpha );

addWeighted( src1, alpha, src2, beta, 0.0, dst);

此函数实现了:

 

3. Changing the contrast and brightness of an image

图像处理:

a. A general image processing operator is a function that takes one or more input images and produces an output image.

b. Image transforms can be seen as:

    1) Point operators (pixel transforms)  对点的操作(像素的变换)

    2) Neighborhood (area-based) operators  对邻域的操作

 

Brightness and contrast adjustments:

point processes, multiplication and addition with a constant::

      

写成像素的形式:

     

实现:

cv::Mat new_image = cv::Mat::zeros( image.size(), image.type());
double alpha = 1.0; /*Simple contrast control*/
double beta = 0;    /*Simple brightness control*/

for(int y=0; y(y,x)[c] = cv::saturate_cast \
                        (alpha*image.at(y,x)[c] + beta);
        }
    }
}

 

 

 

 

 

 

 

 

你可能感兴趣的:(C/C++)