2.2 OPenCV直接访问像素和filter2D函数两种方式实现图片对比度增强

矩阵的Mask操作是非常简单的.就是我们根据掩码矩阵(Kernel矩阵)重新计算图像总每个像素的值.此Mask值用于调整相邻像素对新像素的影响程度.从数学的角度来看,是用我们指定的值做了一个加权平均数.

测试用例

要实现对图像对比度的增强,基本上我们会对图像中的每一个像素应用下面的公式:
在这里插入图片描述
上图中第一种表示方式是使用公式,第二种表示法是使用Mask,其是第一种表示法的压缩版本.你可以通过将Mask矩阵的中心((由0 - 0索引标记的大写字母))放在你想计算的像素上,然后将像素值与重叠部分矩阵值相乘.以上两种表示方法是一样的,但是在大型矩阵的情况下,使用后一种表示法更容易理解.

实例源码

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
static 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_path -- 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] : "../sky.jpg";
    Mat src, dst0, dst1;
    if (argc >= 3 && !strcmp("G", argv[2]))
        src = imread( samples::findFile( filename ), IMREAD_GRAYSCALE);
    else
        src = imread( samples::findFile( filename ), IMREAD_COLOR);
    if (src.empty())
    {
        cerr << "Can't open image ["  << filename << "]" << endl;
        return EXIT_FAILURE;
    }
    namedWindow("Input", WINDOW_AUTOSIZE);/**创建自适应图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值