opencv如何缩放彩色图像

feilongzafei 2010-06-07 05:31:00
问高手一个关于图像缩放的问题,下面的网址是关于灰度图缩放的程序,对彩色图不好使,请问不用cvResize有其他方法吗,(用opencv将会导致图像失真)还有其他类似 http://blog.csdn.net/zdl1016/archive/2008/03/02/2139941.aspx缩放彩色图像的方法吗
...全文
106 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
feilongzafei 2010-06-07
  • 打赏
  • 举报
回复
上面网址内容如下:

感觉上opencv很强大,但是,用起来又有点茫然,一点一点对她的内部机制了解吧。
下面是今天的研究成果:
由于标准话人脸模板要缩放图像到统一的尺寸,奇怪的是 CV里面居然没有提供这样的函数~~~哎

1:
// :双线性插值缩放图像
// : 输入参数
// : image:输入图像(8bit,单通道)
// : rows:缩放后的行数,
// : cols:缩放后的列数
// : 返回
// : 缩放后的图像
IplImage* ZoomBilinear( IplImage* image, int rows, int cols )
{
int depth = 8, channels = 1;
IplImage* pImg = cvCreateImage( cvSize(cols,rows), depth, channels );
float scaleFactorRow = ((float)rows)/image->height;
float scaleFactorCol = ((float)cols)/image->width;
int i_out, j_out, i_in, j_in;
float i_in_f, j_in_f;
float u , v ;
float pixel;

u = v = 0.0;

for( i_out=0; i_out<rows; ++i_out )
{
for( j_out=0; j_out<cols; ++j_out )
{
i_in_f = ((float)i_out) / scaleFactorRow;
j_in_f = ((float)j_out) / scaleFactorCol;
u = i_in_f - cvFloor( i_in_f );
v = j_in_f - cvFloor( j_in_f );
i_in = cvFloor( i_in_f );
j_in = cvFloor( j_in_f );

// :对边界值暂不做处理
if ( image->height==i_in || image->width==j_in ||
0==i_in || 0==j_in )
continue;

pixel =
(1-u)*(1-v)*CV_IMAGE_ELEM(image,uchar,i_in,j_in) +
(1-u)*v*CV_IMAGE_ELEM(image,uchar,i_in,j_in+1) +
u*(1-v)*CV_IMAGE_ELEM(image,uchar,i_in+1,j_in) +
u*v*CV_IMAGE_ELEM(image,uchar,i_in+1,j_in+1);

CV_IMAGE_ELEM(pImg, uchar, i_out, j_out ) = cvFloor( pixel );

}
}

return pImg;
}

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧