基于Qt + Vs2019 图像识别入门基础 增强图像对比度(矩阵的掩膜操作)

       这是本人正式开始研究写的第一篇博客,本人是东北**大学本科计算机毕业,目前在DHU研究纺织图像识别等,目前在图像识别方向是小白一个,希望有志同道合的朋友一起讨论,一起进步,同时也为未来有这个方向的学者提供一些帮助。

     

获取图像像素指针等API

Mat.ptr<uchar>(int i=0); //获取像素矩阵的指针,索引i表示第几行,从0开始计数
const uchar *current = img.ptr<uchar>(row); //获取当前行指针
p(row,col) = current[col] //获取当前像素点像素值

saturate_cast<uchar>(); //像素范围处理,使像素规范处于0~255之间

img2 = Mat::zeros(img.size(), img,type()); 
//初始化数组 使得img2数组初始化为img数组一样的大小与类型

手动提高图片对比度公式是将一个像素点像素值*5然后减去4邻接的像素点像素值之和

公式表达:f(2,2)*5 - f(2,1) - f(2,3) - f(1,2) - f(1,3) ------------(f(x,y)操作是取像素值操作)

代码如下:

#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>

using namespace std;
using namespace cv;

int main() {
	Mat src, dst;
	src = imread("C:/PICTURES/soul.jpg");
	if (!src.data) {
		printf("找不到图片\n");
		return -1;
	}

	namedWindow("tupian", WINDOW_AUTOSIZE);
	imshow("tupian", src);

	int cols = (src.cols-1) * src.channels(); //取总列数
	int offset = src.channels(); //取通道数
	int rows = src.rows;

	dst = Mat::zeros(src.size(), src.type()); //初始化
	for (int row = 1; row < rows - 1; row++) //从第一行开始,跳过图片边缘第一行
	{
		const uchar* previous = src.ptr<uchar>(row - 1); //取上一像素点行指针
		const uchar* current = src.ptr<uchar>(row);
		const uchar* next = src.ptr<uchar>(row + 1);

		uchar* output = dst.ptr<uchar>(row); //取新图像

		for (int col = offset; col < cols; col++) 
        //cols也是从0起始,这里给col赋初值channels等同于让遍历从第二个像素点开始,也就是第四 
        //列,前三列分别是第一个像素的BGR
		{
			output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offset] + current[col + offset] + previous[col] + next[col])); //current[*]是取这一点像素值
		}
	}
	namedWindow("增强对比度", WINDOW_AUTOSIZE);
	imshow("增强对比度", dst);
	waitKey(0);

	return 0;


}

       这边实现的就是手动的掩膜操作来实现对比度的提高,但其实opencv里已经有这个API了,我们手动敲可以体会一下深层次的代码运行。

kernel = (Mat_char(3,3) << 0, -1, 0,
                          -1, 5, -1,
                           0, -1, 0);

filter2D(src, dst,src.depth(), kernel);

       前面配环境一些基础的文章已经有很多博主写过了,我就不在重复写了,我会挑选一些我觉得通俗易懂的文章分享给大家,欢迎大家留言

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值