gpt4 book ai didi

c - 增加亮度并不能产生预期的效果

转载 作者:行者123 更新时间:2023-11-30 19:20:32 25 4
gpt4 key购买 nike

    cvCvtColor(img,dst,CV_RGB2YCrCb);
for (int col=0;col<dst->width;col++)
{
for (int row=0;row<dst->height;row++)
{
int idxF = row*dst->widthStep + dst->nChannels*col; // Read the image data
CvPoint pt = {row,col};
temp_ptr2[0] += temp_ptr1[0]* 0.0722 + temp_ptr1[1] * 0.7152 +temp_ptr1[2] *0.2126 ; // channel Y
}
}

但是结果是这样的:

enter image description here

请帮忙我哪里出错了?

最佳答案

关于此代码示例,有很多要说:

  • 首先,您使用的是旧的 C 风格 API(IplImage 指针、cvBlah 函数等),它已经过时且更难以维护(特别是,很容易引入内存泄漏),因此您应该考虑使用 C++ 风格的结构体和函数(cv::Mat 结构体和 cv::blah 函数)。

  • 您的错误可能来自于一开始的指令cvCopy(dst,img);。这会在开始处理之前填充您的输入图像,因此您应该删除此行。

  • 为了获得最大速度,您应该反转两个循环,以便首先遍历行,然后遍历列。这是因为 OpenCV 中的图像是逐行存储在内存中的,因此通过增加列来访问图像在缓存使用方面更加高效。

  • 临时变量 idxF 从未使用过,因此您也应该删除以下行:

    int idxF = row*dst->widthStep + dst->nChannels*col;
  • 当您访问图像数据以将像素存储在 temp_ptr1temp_ptr2 中时,您交换了 xy坐标。您应该通过以下方式访问图像:

    temp_ptr1  = &((uchar*)(img->imageData + (img->widthStep*pt.y)))[pt.x*3];
  • 您永远不会释放分配给dst的内存,因此在您的应用程序中引入了内存泄漏。在函数末尾调用 cvReleaseImage(&dst);

关于c - 增加亮度并不能产生预期的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22113795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com