• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

opencv的resize和matlab的imresize函数的计算

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在用c++代码复现matlab代码时,遇到两者resize函数的结果不相同的问题。

opencv:

resize(image1, reTmp, Size(50, 50), 0, 0, cv::INTER_LINEAR);

matlab:

tmp=imresize(img,[50 50],'bilinear','AntiAliasing',false);

以一张500×396的彩色图片为例,resize到(50,50):

 

matlab  imresize代码:

img=imread('image/cluo.jpg');
img=single(img);
for i=1:10
    fprintf('%.6f ',img(1,i,1));
end
fprintf('\n');
tmp=imresize(img,[50 50],'bilinear','AntiAliasing',false);
for i=1:10
    fprintf('%.6f ',tmp(1,i,1));
end

c++ resize代码:

#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;

void main()
{
    Mat image = imread("cluo.jpg");
Mat image1(image.rows, image.cols, CV_32FC3);
for (int i = 0; i < image.rows; i++) for (int j = 0; j < image.cols; j++) { image1.at<Vec3f>(i, j)[2] = image.at<Vec3b>(i, j)[0]; image1.at<Vec3f>(i, j)[1] = image.at<Vec3b>(i, j)[1]; image1.at<Vec3f>(i, j)[0] = image.at<Vec3b>(i, j)[2]; } //打印输出resize前r通道前10个像素点的坐标 for (int i = 0; i < 10; i++) printf("%.6f ", image1.at<Vec3f>(0, i)[0]); printf("\n"); Mat reTmp; resize(image1, reTmp, Size(50, 50), 0, 0, cv::INTER_LINEAR); //resize(image1, reTmp, Size(50, 50), 0, 0, cv::INTER_NEAREST); //打印输出resize后r通道前10个像素点的坐标 for (int i = 0; i < 10; i++) printf("%f ", reTmp.at<Vec3f>(0, i)[0]); printf("\n"); system("pause"); }

结果比较:

结果基本相同

matlab中默认的     tmp=imresize(img,[50 50],'bilinear');    函数是打开了抗锯齿   结果和opencv中的INTER_LINEAR不相同

 

matlab  和  opencv中  nearest  方式的结果比较:

c++:    resize(image1, reTmp, Size(50, 50), 0, 0, cv::INTER_NEAREST);

matlab:   tmp=imresize(img,[50 50],'nearest');

matlab:   tmp=imresize(img,[50 50],'nearest','AntiAliasing',false);

结果不相同

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap