不能循环遍历矩形图像矩阵的所有像素

时间:2011-10-22 14:15:17

标签: c++ opencv

我正在尝试增加加载图像img的亮度,但要循环使用较小的矩阵[我稍后将用于应用高斯模糊]的像素。这是我的功能:

void Dobright(cv::Mat &in,IplImage * img)
{   
    uchar* temp_ptr ;
    for( int row = 0; row < in.rows; row++) 
    {
            for ( int col = 0; col < in.cols; col++) 
            {
                CvPoint pt = {row,col};
                temp_ptr  = &((uchar*)(img->imageData + img->widthStep*pt.y))[pt.x*3];
                temp_ptr[0] += 100;
                temp_ptr[1] += 100;
                temp_ptr[2] += 100;
            }
    }
}

但是如果原始图像是:

enter image description here

我得到了明亮的图像:

enter image description here

正如你可以看到一些部分比其他部分更亮,因为行和列不相同因此不能访问整个图像的像素,如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

从它的外观看你有宽度和高度混合,尝试使用:
CvPoint pt = {col,row};

同样使用您当前的算法,当像素原始值> 1时,您将遇到问题。 155,(156 + 100 = 1)因为四舍五入。尝试使用

tmp_ptr[0] = (tmp_ptr > 155) ? 255 : tmp_ptr[0] + 100;

答案 1 :(得分:1)

看起来你已经在这里翻了你的x和y。您希望CvPoint为{col,row}而不是{row,col}

以这种方式思考:第三行,第五列是点(5,3),而不是点(3,5)。