opencv的图像处理通常会对像素进行处理,因此需要读取像素,我通过实例-----使用uchar格式与float格式互相转化来说明如何对图像的像素进行处理。
在C++函数处理时,通常是使用指针来改变图像值,因此,本例也是使用指针访问像素。
下面为灰度图转换,通过读取每一行第一个像素的地址,来访问每一个像素。注意图像是什么格式,像素首地址就是什么格式,不同格式取地址会出错。
void uchar2float(const Mat tyuchar, Mat &tyfloat)
{
for (int i = 0; i < tyuchar.rows; i++)
{
const uchar* ty1 = tyuchar.ptr<uchar>(i);
float* ty2 = tyfloat.ptr<float>(i);
for (int j = 0; j < tyuchar.cols; j++)
{
ty2[j] = ty1[j];
}
}
}
彩色图像转换,由于彩色图像包含3个通道,因此需要乘上通道数来访问到需要的处理的像素。
void uchar2float(const Mat tyuchar, Mat& tyfloat)
{
for (int i = 0; i < tyuchar.rows; i++)
{
const uchar* ty1 = tyuchar.ptr<uchar>(i);
float* ty2 = tyfloat.ptr<float>(i);
for (int j = 0; j < tyuchar.cols; j++)
{
//ty