OpenCV第七发:图像像素处理实现Halcon算子

在这里我觉得图像处理也就是像素处理,像素处理也就是数学计算,我觉得应该多看看Halcon的帮助文档。多看帮助,多学英语。

如:emphasize这个算子,Halcon的帮助文档直接给出了计算方法。

OpenCV第七发:图像像素处理实现Halcon算子_第1张图片

又如:rgb1_to_gray这个将GBR彩色图像如何转换成灰度图像也就计算公式

OpenCV第七发:图像像素处理实现Halcon算子_第2张图片

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;

int main() {

	Mat srcImage = imread("D:/opencv/Img01.jpg");
	Mat OutPutImg;
	//Mat OutPutImg = Mat::zeros(srcImage.size(), srcImage.type());
	
	if (!srcImage.data) {
		printf("骚年:你应该继续查找你的文件路径是什么??或者你电脑是否需要换新的。");
		return -1;
	}

	//if (srcImage.empty()) {//如果图像为空则返回 false
	//	printf("如果图像为空则返回 false");
	//	return -1;
	//}
	//imshow("源图像", srcImage);

	OutPutImg = Mat::zeros(srcImage.size(), srcImage.type());


	int H = srcImage.rows;
	int W = srcImage.cols;
	int channal = srcImage.channels();
	Mat tmpM;
	srcImage.convertTo(tmpM,CV_32F);

	float alpha = 0.2;
	float bate = 0.4;

	//二话不说先来两个for循环
	for (int row = 0; row < H; row++) {
		for (int col = 0; col < W; col++) {
			if (channal == 1) 
			{				
				float GrayPXI = srcImage.at(row, col);
				//将每个像素值用255减去,则会重置每一个像素值。
				//如 5 = 255-250   250 = 255-5
				OutPutImg.at(row, col) = saturate_cast(GrayPXI*alpha+ bate);
			}
			else if (channal == 3) {
				//读取像素值
				float BB = srcImage.at(row, col)[0];
				float GG = srcImage.at(row, col)[1];
				float RR = srcImage.at(row, col)[2];
				//重置像素值
				OutPutImg.at(row, col)[0] = saturate_cast(BB*alpha + bate);
				OutPutImg.at(row, col)[1] = saturate_cast(GG*alpha + bate);
				OutPutImg.at(row, col)[2] = saturate_cast(RR*alpha + bate);
				//关于Vec3f 或者Vec3b 请按F12查看源代码解释
				//在3通道RGB图像中,计算机储存结构为BGR,我们都知道,图像在计算机中实际上是以数组或者说矩阵形式储存
				//在单通道图像中,图像的第一个像素值就是 [0]的所对应的值,
				//例如 2*2 的 1 通道图像储存结构:
				//{[Gray],[Gray]
				//[Gray],[Gray]}
				//但是在3通道图像中图像的 [0]储存结构是 [0]= {B,G,R}
				//例如 2*2 的 3 通道图像储存结构:
				//{[B,G,R],[B,G,R]
				//[B,G,R],[B,G,R]}
				//则这个 2*2 图像的3通道图像的列宽为 2*3=6 具体请查看相关的 《数字图像处理书籍》
				//因此我们想要的到3通道第一个像素值B时候则应该 :
				//int BB = src.at(row, col)[0];
				//对应的:
				//int GG = src.at(row, col)[1];
				//int RR = src.at(row, col)[2];
				
			}		
		}	
	}

	imshow("输出图像", OutPutImg);
	imshow("源图像", srcImage);

	

	//cout << endl;
	//system("pause");
	waitKey(0);
	return 0;

}

你可能感兴趣的:(OpenCV第七发:图像像素处理实现Halcon算子)