이미지를 2로 다운 샘플링하려합니다. 이미지는 그레이 스케일이라고 가정 했으므로 한 채널에서만 작동하므로 평균 4 픽셀을 시도한 다음 결과를 destImage에 넣습니다. destImage를 올바르게 채울 방법을 모르겠습니다. 친절 여기에 코드를 찾을 : 나는 당신이 그렇게 단지의 경우, Qt를을 사용하는 당신은 바퀴를 재발견 할 필요가 없습니다 참조이미지 다운 샘플
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();
}
수동으로 수행해야합니까? – dtech
읽는 이미지의 유형은 무엇입니까? – Alex
자세한 내용을 찾으십시오. 결과가 정확히 무엇입니까? – Shahbaz