对图像进行双线性插值算法后,图像出现块效应怎么解决
答案:2 悬赏:0 手机版
解决时间 2021-02-04 20:45
- 提问者网友:藍了天白赴美
- 2021-02-04 10:02
对图像进行双线性插值算法后,图像出现块效应怎么解决
最佳答案
- 五星知识达人网友:躲不过心动
- 2021-02-04 11:03
interpolation 插值方法,类似于 CV_INTER_NN 方法。当图像放大时,dst 输出图像,该方法可以避免波纹出现。当图像缩小时候;
src 输入图像,
CV_INTER_LINEAR - 双线性插值 (缺省使用)
CV_INTER_AREA - 使用象素关系重采样.
该方法就是用于将图像改变为dst定义的大小..
CV_INTER_CUBIC - 立方插值, CvArr* dstvoid cvResize( const CvArr* src,然后根据你选择的插值方法进行插值, int interpolation=CV_INTER_LINEAR ):
CV_INTER_NN - 最近邻插值.
src 输入图像,
CV_INTER_LINEAR - 双线性插值 (缺省使用)
CV_INTER_AREA - 使用象素关系重采样.
该方法就是用于将图像改变为dst定义的大小..
CV_INTER_CUBIC - 立方插值, CvArr* dstvoid cvResize( const CvArr* src,然后根据你选择的插值方法进行插值, int interpolation=CV_INTER_LINEAR ):
CV_INTER_NN - 最近邻插值.
全部回答
- 1楼网友:老鼠爱大米
- 2021-02-04 11:35
何东健的《数字图像处理》光盘第六章有前两种的程序
完整程序已发你邮箱
核心代码如下:
for(y = 0; y < nnewheight; y++)
{
//指向新图像第y行
//注意此处宽度和高度是新图像的宽度和高度
pnewtemp = pnewbits;
pnewtemp += (nnewheight - 1 - y) * nnewwidthbytes;
//针对图像每列进行操作
for(x = 0; x < nnewwidth; x++)
{
//计算该像素在源图像中的坐标
int y0 = (long) (y / fyzoomratio + 0.5);
int x0 = (long) (x / fxzoomratio + 0.5);
//判断是否在源图范围内
if( (x0 >= 0) && (x0 < noldwidth) &&
(y0 >= 0) && (y0 < noldheight))
{
//用双线性插值
if(bbilinear)
{
unsigned char *ptemp = interpolation (noldwidth, noldheight,
(float)x0, (float)y0,
noldwidthbytes, nmovedbits, poldbits);
//复制像素
memcpy(pnewtemp, ptemp, nmovedbits);
delete [] ptemp ;
}
else
//最近邻插值
{
//指向源图像第y0行,第x0个像素
//注意此处宽度和高度应该互换
poldtemp = poldbits;
poldtemp += (noldheight - 1 - y0) * noldwidthbytes;
poldtemp += x0 * nmovedbits;
//复制像素
memcpy(pnewtemp, poldtemp, nmovedbits);
}
}
pnewtemp += nmovedbits;
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯