基本的图像处理操作

1. Mask operation

官网

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

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

实现方法:

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<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++ = cv::saturate_cast<uchar>(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_<char>(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<image.rows; y++)
{
    for(int x=0; x<image.cols; x++)
    {
        for(int c=0; c<image.channels(); c++)
        {
            new_image.at<cv::Vec3b>(y,x)[c] = cv::saturate_cast<uchar> \
                        (alpha*image.at<cv::Vec3b>(y,x)[c] + beta);
        }
    }
}

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值