• 【OpenCV学习】第2课:矩阵的掩膜操作(提高对比度)


    仅自学做笔记用,后续有错误会更改

    理论
    这里用到的掩膜,其实只是数学中卷积的概念的一个应用

    上下左右4个像素值分别乘以-1,再加上中间像素值乘以5的值,最后得到的值再重新赋值给中间像素,这就是掩膜的一个例子
    矩阵的掩膜操作比较简单,根据掩膜来重新计算每个像素的像素值,掩膜(mask)也被称为核(kernel)

    相关API
    CV_Assert(myImage.depth()==CV_8U); // 1.验证深度
    Mat.ptr (int i=0); // 2.获取像素矩阵的指针,索引i表示第几行,从0开始
    const uchar* pRowData = myImage.ptr(row); // 3.获取某行指针
    pRowData[col]; // 4.获取某列指针

    代码示例

    Mat srcImageMat = cv::imread(...);
    int nCols=(srcImageMat.cols-1)*srcImageMat.channels();
    int nOffsetx=srcImageMat .channels();
    int nRows=srcImageMat.rows;
    Mat dstImageMat=Mat::zeros(srcImageMat.size(),srcImageMat.type());
    for(int rowindex=1;rowindex<(nRows-1);rowindex++){
    	const uchar* pre=srcImageMat.ptr(rowindex-1);
    	const uchar* cur=srcImageMat.ptr(rowindex);
    	const uchar* next=srcImageMat.ptr(rowindex+1);
    	uchar* output=dstImageMat.ptr(rowindex);
    	for(int colindex=nOffsetx;colindex(5*cur[colindex]-(cur[colindex-nOffsetx]+cur[colindex+nOffsetx]+pre[colindex]+next[colindex]));
    	}
    }
    nameWindows("Test DstImage",CV_WINDOW_AUTOSIZE);
    imshow("Test DstImage",dstImageMat);
    // 上述代码中的saturate_cast(数值)这个东西的功能是保证其数值在0~255之内,超出部分会相应返回0或255
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    OpenCV现成的接口调用示例

    // 这两步可以表示上边一堆代码的操作
    Mat kernel=Mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0;
    filter2D(srcImageMat,dstImageMat,srcImageMat.depth(),kernel);
    
    • 1
    • 2
    • 3

    计算时间消耗

    double dOldTime = getTickCount();
    Mat kernel=Mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0;
    filter2D(srcImageMat,dstImageMat,srcImageMat.depth(),kernel);
    double dTimeConsune = (getTickCount()-dOldTime)/getTickFrequency();
    
    • 1
    • 2
    • 3
    • 4

    效果截图:
    在这里插入图片描述

  • 相关阅读:
    电脑一键重装系统后连不上远程了?教你设置的方法
    【含视频教程】python实现图书管理系统
    集群所有进程查看脚本xcall.sh
    二十四节气—立秋,文案、海报分享。
    网站日志采集和分析流程
    二、BurpSuite Intruder暴力破解
    线性代数---第三章向量
    three.js 第五十四用如何给shader传递结构体数组
    React 18 对 state 进行保留和重置
    快速排序详解
  • 原文地址:https://blog.csdn.net/qq_25563175/article/details/128187032