使用Mat.at<uchar>(row,col)的方法速度太慢,使用指針周遊的方法速度快!
以下例子是用于何凱明去霧算法中暗通道的提取方法,取三通道圖像src中每個通道對應位置的像素最小值,作為dst的對應像素值。
void GetDarkChannelMat(Mat src, Mat* dst)
{
vector<Mat> vecChannels(src.channels());
split(src, vecChannels);
uchar minPixel = 0;
for (int i = 0; i < src.rows; i++)
{
uchar* pData_b = vecChannels[0].ptr<uchar>(i);
uchar* pData_g = vecChannels[1].ptr<uchar>(i);
uchar* pData_r = vecChannels[2].ptr<uchar>(i);
uchar* pData_dst = dst->ptr<uchar>(i);
for (int j = 0; j < src.cols; j++)
{
uchar data_b = *pData_b++;
uchar data_g = *pData_g++;
uchar data_r = *pData_r++;
pData_dst[j] = data_b < data_g ?
(data_b < data_r ? data_b : data_r) :
(data_g < data_r ? data_g : data_r);
}
}
}