2011-10-22 109 views
2

我试图增加加载图像的亮度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

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

+0

你知道有OpenCV函数用于应用高斯模糊以及缩放矩阵的函数吗? (例如cv :: Mat :: convert()) – Unapiedra

+0

@Unapiedra - 我知道。 –

回答

1

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

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

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

1

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

想想这样:第三行第五列是点(5,3),而不是点(3,5)。