无法循环遍历矩形图像矩阵的所有像素

发布于 2024-12-11 06:09:09 字数 818 浏览 0 评论 0原文

我正在尝试增加加载图像 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;
            }
    }
}

但是,如果原始图像是:

在此处输入图像描述

我得到的明亮图像为:

在此处输入图像描述

正如您所看到的,某些部分比其他部分更亮,并且由于行和列不相同,因此整个图像的像素不同无法访问,请问如何解决 问题?

I am attempting to increase brightness of the loaded image img, however to cycle through the pixels i am using a smaller matrix [which i will use to apply Gaussian blur later]. Here is my function:

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;
            }
    }
}

However if the original image was:

enter image description here

I get the brightened image as:

enter image description here

As you can see some parts are brighter than the others and since rows and columns are not same hence the pixels of entire image is not accessed, how to solve this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

丢了幸福的猪 2024-12-18 06:09:10

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

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

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

from the looks of it you have width and height mixed up, try using:
CvPoint pt = {col,row};

also with your current algorithm you will run into problems when your pixels original values are > 155, (156 + 100 = 1) because of rounding. Try using

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

耀眼的星火 2024-12-18 06:09:10

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

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

Looks like you've flipped your x and y here. You want the CvPoint to be {col,row} not {row,col}.

Think about it this way: third row, fifth column is point (5,3), not point (3,5).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文