gpt4 book ai didi

opencv - RGB转灰度

转载 作者:行者123 更新时间:2023-12-02 17:51:54 29 4
gpt4 key购买 nike

我正在尝试将 RGB 转换为灰度。但输出与原始视频相同。请让我知道此代码中的错误。这将非常有帮助。

IplImage *myimage = cvCreateImage(cvGetSize(videoFrame),IPL_DEPTH_8U, 3);
cvZero(myimage);
CvScalar pixelvalue, setpixelvalue;
for (int i=0;i<videoFrame->height;i++)
{
for (int j=0;j<videoFrame->width;j++)
{
pixelvalue = cvGet2D(videoFrame, i, j);

int b= pixelvalue.val[0];
int g= pixelvalue.val[1];
int r= pixelvalue.val[2];


int gc= r*0.299+g*0.587+b*0.114;
setpixelvalue.val[0]=gc;

cvSet2D(myimage, i, j, setpixelvalue);
cvSet2D(myimage, i, j, pixelvalue);


}

}

最佳答案

您正在覆盖计算值:

cvSet2D(myimage, i, j, setpixelvalue); //here you are setting pixel value at setpixelvalue
cvSet2D(myimage, i, j, pixelvalue); //and here you overwrite it - change to pixelvalue

删除第二个此行 cvSet2D(myimage, i, j, pixelvalue);从你的代码。另外我认为你不需要 3 个 channel ,1 个就足够了 - 将代码的第一行更改为 IplImage *myimage = cvCreateImage(cvGetSize(videoFrame),IPL_DEPTH_8U, 1); .如果由于某种原因您希望图像具有 3 个 channel 而不是您必须将所有 3 个 channel 设置为计算值 - 保持代码的第一行不变并更改此部分:
int gc= r*0.299+g*0.587+b*0.114;
setpixelvalue.val[0]=gc;

对此:
int gc= r*0.299+g*0.587+b*0.114;
setpixelvalue.val[0]=gc;
setpixelvalue.val[1]=gc;
setpixelvalue.val[2]=gc;

当然,在 OpenCV 中有一个函数可以将图像从一种颜色空间转换为另一种颜色空间 - http://opencv.willowgarage.com/documentation/cpp/miscellaneous_image_transformations.html#cv-cvtcolor

关于opencv - RGB转灰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18528319/

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