opencv-8-图像核操作

本文介绍了opencv中的图像核操作,包括图像下侧差分和锐化处理。通过矩阵运算展示了图像锐化的原理,并探讨了opencv中核操作的实现,对比了不同算法的运行时间。
摘要由CSDN通过智能技术生成

开始之前

在准备开始的时候, 我大概列了一个opencv 章节列表, 按照章节进行写, 写到某些部分的时候再具体调整章节内容, 完成了之后, 会将具体的章节链接更新到这个列表中 算是作为一个目录吧.
有的章节写到很快, 有的章节写的很慢, 但是我会坚持一直写下去

目录

开始

按照我的写作计划, 之前算是完成了前面的大的章节, 我们开始正式进入图像处理的章节了, 在之前的章节中,我们介绍了图像的遍历操作, 我们从一个基础的问题出发, 我们对于每一点的像素值, 每个点减去他上面边的点的值作为结果值, 那我们会得到什么图呢,

图像下侧差分

这我们为了简单运算吧, 我们提前将结果初始化为0, 然后将每一行的像素减去它上面的像素, 作为结果当前点的颜色值 我们看下代码以及跑起来看下会是什么结果

int main(int argc, char *argv[])
{
   
    // 设置 要显示的图像路径
    std::string lena_png = "./TestImages/lena.png";
    cv::Mat src_img = cv::imread(lena_png);
    cv::Mat res_img = cv::Mat::zeros(src_img.size(), CV_8UC3);
    // 初始化所有结果为 0 第一行不存在上一行, 默认为0  彩色图像 每个通道都计算
    for (int i = 1; i < src_img.rows; i++)
    {
   
        for (int j = 0; j < src_img.cols; j++)
        {
   
            for (int k = 0; k < src_img.channels(); k++)
            {
   
                res_img.at<cv::Vec3b>(i, j)[k] = src_img.at<cv::Vec3b>(i, j)[k] - src_img.at<cv::Vec3b>(i-1, j)[k];
            }
        }
    }

    cv::imshow("src_img", src_img);
    cv::imshow("res_img", res_img);

    cv::waitKey(0);

    return 0;
    // return a.exec();
}

其中核心部分就是计算 res_img.at<cv::Vec3b>(i, j)[k] = src_img.at<cv::Vec3b>(i, j)[k] - src_img.at<cv::Vec3b>(i-1, j)[k]; 颜色部分, 我们的 i 从第一行开始的 所以不会出现索引出错, 这个操作比较简单, 我们得到了下面的图像结果,

下差分图

图像锐化操作

我们这里说一下, 在之前的章节也都提过, 在图像处理的过程中, 我们一般采用的是灰度图像, 能够有效的获取到图像的细节特征, 而且计算起来比较方便, 所以我们在后续进行一下算法处理的时候会采用灰度图像, 特此说明

根据opencv 例程Mask operations on matrices 中提到的一个案例, 我计算一个点与它四邻域的的差值的 也就是
g ( i , j ) = f ( i , j ) + ( f ( i , j ) − f ( i − 1 , j ) ) + ( f ( i , j ) − f ( i , j − 1 ) ) + ( f ( i , j ) − f ( i , j + 1 ) ) + ( f ( i , j ) − f ( i + 1 , j ) ) ; g(i,j) = f(i,j) + (f(i,j)-f(i-1,j))+ (f(i,j)-f(i,j-1))+ (f(i,j)-f(i,j+1))+ (f(i,j)-f(i+1,j)); g(i,j)=f(i,j)+(f(i,j)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值