我正在尝试增加加载图像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;
}
}
}
但是如果原始图像是:
我得到了明亮的图像:
正如你可以看到一些部分比其他部分更亮,因为行和列不相同因此不能访问整个图像的像素,如何解决这个问题?
答案 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)。