自己实现灰度图像增强(线性灰度增强)

自己实现灰度图像增强(线性灰度增强)

线性灰度变换函数:
	变换前图像f(x,y)的灰度范围为[a,b],变换后图像g(x,y)的灰度范围扩展或压缩至[c,d]。

1、代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
void Tran_zeng(Mat &src,Mat &dst,uchar gMin,uchar gMax);
void Tran_zeng(Mat &src,Mat &dst,uchar gMin,uchar gMax)
{
	dst=src.clone();		//得到原图像一份拷贝
	uchar *p_data=dst.data;
	int nWidth=src.cols;		//得到图像宽度
	int nHeigth=src.rows;		//得到图像高度
	int nLineByte=dst.cols;		//一行字节数
	int nPixel; 			//像素值
	
	//逐个扫描图像中的像素点,进行灰度线性变换
	for (int i=0;i<nHeigth;i++)		//行
	{
		for (int j=0;j<nWidth;j++)	//列
		{ 
			
			nPixel = p_data[nLineByte * i + j];	// 获取当前像素点的灰度值

			//根据公式求出目标图像中与当前点对应的像素的灰度值
			p_data[i * nLineByte + j] =(uchar)(((float)(gMax-gMin)/255)*nPixel+gMin);
		}
	}

}
int main()
{
	Mat  srcimg=imread("E:\\图库\\lena.bmp");
	namedWindow("原图");
	moveWindow("原图",20,20);
	imshow("原图",srcimg);


	if (srcimg.channels()==1)
	{
		cout<<"加载图像正确"<<endl;
	}
	else
	{
		cout<<"彩色转灰度"<<endl;
		cvtColor(srcimg,srcimg,CV_BGR2GRAY);


	}
	namedWindow("灰度图");
	moveWindow("灰度图",20,320);
	imshow("灰度图",srcimg);

	Mat dstimg;
	Tran_zeng(srcimg,dstimg,0,255);
	namedWindow("增强图像");
	moveWindow("增强图像",20,620);
	imshow("增强图像",dstimg);
	waitKey(0);
	return 0;
}
运行结果
      
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值