gpt4 book ai didi

c++ - 下采样图像

转载 作者:行者123 更新时间:2023-11-28 03:21:06 32 4
gpt4 key购买 nike

我正在尝试将一幅图像减采样 2,该图像我假设它是灰度的,所以我将只使用一个 channel ,我尝试平均 4 个像素,然后将结果放入 destImage。我不知道如何正确填充 destImage。请在此处找到代码:

void downsizeRow(unsigned char *srcImage, unsigned char *dstImage, int srcWidth )
{

unsigned char *srcPtr = srcImage;
unsigned char *dstPtr = dstImage;

int stride = srcWidth;
int b;
for (int i = 0; i< 4; i++)
{

b = srcPtr[0]+srcPtr[1] + srcPtr[stride + 0] + srcPtr[stride + 1] ;

srcPtr++;
dstPtr[0] = (uint8_t)((b + 2)/4);;
dstPtr++;
}

}

void downscaleImage( unsigned char *srcImage, unsigned char *dstImage, int srcWidth, int dstHeight, int dstWidth)
{

unsigned char *srcPtr=srcImage;
unsigned char *dstPtr=dstImage;

int in_stride = dstWidth;
int out_stride = dstHeight;

for (int j=0;j<dstHeight;j++)
{
downsizeRow(srcPtr, dstPtr, srcWidth); // in_stride is needed
// as the function requires access to iptr+in_stride
srcPtr+=in_stride * 2;
dstImage+=out_stride;
}
}

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

unsigned char srcimage[4*4];
unsigned char dstimage[2*2];


for (int i = 0; i<4*4; i++)
{
srcimage[i] = 25;
}
std::cout<<"source Image \n"<<std::endl;
for (int i = 0; i<4*4; i++)
{

std::cout<<srcimage[i];
}

downscaleImage(srcimage, dstimage, 4,4,2);
std::cout<<"dest Image"<<std::endl;
for (int i = 0; i<2*2; i++)
{

// std::cout<<dstimage[i];
}

return a.exec();
}

最佳答案

您的代码没有太多错误——基本上只是正确跟踪读/写指针位置(记住要大步更新)。这需要以一种或另一种方式使用 2 个嵌套循环。 (+ 将分隔符固定为 4)。

我发现以下方法很有用:一次处理一行并没有太大的速度损失,但可以更轻松地集成各种内核

iptr=input_image;  in_stride = in_width;
optr=output_image; out_stride = out_width;
for (j=0;j<out_height;j++) {
process_row(iptr, optr, in_width); // in_stride is needed
// as the function requires access to iptr+in_stride
iptr+=in_stride * 2;
optr+=out_stride;
}

关于c++ - 下采样图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15407018/

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