opencv:at()
2019-07-25 本文已影响1人
青吟乐
在图像处理的时候会对每个像素点进行操作,at()可以获取到精确的像素点,
函数
picture1.at<uchar>(i,j) 单通道图像获取像素点,多通道图像获取像素点
picture2.at<Vec3b>(i,j)[c]多通道第c通道的像素值,c从开始
下面的代码就是一个用来对图像像素值计算的方法
void FattalToneMapping::calculateDivergence(cv::Mat & Gx, cv::Mat & Gy, cv::Mat & divG)
{
divG = cv::Mat::zeros(Gx.rows, Gx.cols, CV_32FC1); //返回一个给定参数大小的矩阵
for (int i = 0; i < Gx.rows; i++) //依照像素顺序进行循环
for (int j = 0; j < Gx.cols; j++)
{
divG.at<float>(i, j) = Gx.at<float>(i, j) + Gy.at<float>(i, j); //成像图每个像素值等于给定的两个图像的对象像素值的和
if (j > 0) { divG.at<float>(i, j) -= Gx.at<float>(i, j - 1); } //j>0,和减去Gx对应像素点的的左边的像素点
if (i > 0) { divG.at<float>(i, j) -= Gy.at<float>(i - 1, j); } //i>0,和减去Gy对应像素点的的上放的像素点
if (j == 0) { divG.at<float>(i, j) += Gx.at<float>(i, j); } //j==0,和加上Gx的对应像素点的值
if (i == 0) { divG.at<float>(i, j) += Gy.at<float>(i, j); } //i==0,和加上Gy对应像素点的值
}
}