opencv2.4改变图像的大小
2012-08-02 12:39
423 查看
你可以指定插值方法来改变图像的大小。
INTER_NEAREST 最近插值
INTER_LINEAR 双线性插值(默认使用情况)
INTER_AREA 使用像素区域面积重采样,这是一个图像抽取的首选方法,因为他是moire’-free的结果。但是,当放大图像类似操作最好是INTER_NEAREST最近插值法好。
INTER_CUBIC 4x4 超过4x4的像素附近的两次立方插值
INTER_LANCZOS4 8x8 超过8x8像素附近的Lanczos插值
C++: void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
src – 源图像.
dst – 目标图像大小。
fx – 沿着横轴换算因子。当它是0,他计算为
fy – 沿着纵轴换算因子。当它是0,他计算为
interpolation – 插值方法。INTER_NEAREST INTER_LINEAR
INTER_AREA INTER_CUBIC INTER_LANCZOS4
如果你需要使用dst的大小输出,可以这样
resize(src, dst, dst.size(), 0, 0, interpolation);
如果要使用源图像大小缩放,可以这样
resize(src, dst, Size(), 0.5, 0.5, interpolation);
要缩小图像,一般最好是INTER_AREA重采样插值法。而放大图像,他通常最好是CV_INTER_CUBIC(慢)或CV_INTER_LINEAR(更快,但仍然看起来不错)
输入画像:
运行結果(纵横0.5倍,纵0.5倍+横2.0倍):
INTER_NEAREST 最近插值
INTER_LINEAR 双线性插值(默认使用情况)
INTER_AREA 使用像素区域面积重采样,这是一个图像抽取的首选方法,因为他是moire’-free的结果。但是,当放大图像类似操作最好是INTER_NEAREST最近插值法好。
INTER_CUBIC 4x4 超过4x4的像素附近的两次立方插值
INTER_LANCZOS4 8x8 超过8x8像素附近的Lanczos插值
#include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> int main(int argc, char *argv[]) { cv::Mat src_img = cv::imread("../../image/lenna.png", 1); if(src_img.empty()) return -1; cv::Mat dst_img1; cv::Mat dst_img2(src_img.rows*0.5, src_img.cols*2.0, src_img.type()); // INTER_LINER(最近插值)改变大小 cv::resize(src_img, dst_img1, cv::Size(), 0.5, 0.5); // INTER_CUBIC(两次立方插值)改变大小 cv::resize(src_img, dst_img2, dst_img2.size(), cv::INTER_CUBIC); cv::namedWindow("resize image1", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO); cv::namedWindow("resize image2", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO); cv::imshow("resize image1", dst_img1); cv::imshow("resize image2", dst_img2); cv::waitKey(0); }
C++: void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
src – 源图像.
dst – 目标图像大小。
fx – 沿着横轴换算因子。当它是0,他计算为
fy – 沿着纵轴换算因子。当它是0,他计算为
interpolation – 插值方法。INTER_NEAREST INTER_LINEAR
INTER_AREA INTER_CUBIC INTER_LANCZOS4
如果你需要使用dst的大小输出,可以这样
resize(src, dst, dst.size(), 0, 0, interpolation);
如果要使用源图像大小缩放,可以这样
resize(src, dst, Size(), 0.5, 0.5, interpolation);
要缩小图像,一般最好是INTER_AREA重采样插值法。而放大图像,他通常最好是CV_INTER_CUBIC(慢)或CV_INTER_LINEAR(更快,但仍然看起来不错)
输入画像:
运行結果(纵横0.5倍,纵0.5倍+横2.0倍):
相关文章推荐
- OpenCV学习笔记:resize函数改变图像的大小
- OpenCV改变图像大小的操作
- OpenCV改变图像大小的操作
- OpenCV改变图像大小的操作,resize与图像金字塔方法
- OpenCV——改变图像大小
- opencv2改变图像像素大小到指定像素并保存改变后的图像
- opencv改变图像大小cvResize和resize
- opencv2改变图像的大小
- OpenCV resize函数改变图像的大小
- OpenCV改变图像大小的操作
- opencv--用鼠标动态改变显示图像窗口大小
- opencv图像resize(改变图片大小)
- OpenCV改变图像大小的操作,resize与图像金字塔方法
- C# (GDI+相关) 图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- Ribbon+Opencv 2.4--实现一个简单的Opencv图像处理小工具
- opencv 图像旋转的问题 ,图片大小不变,怎么把图片移到中间去,图片跟框框想切
- C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- 黄聪:C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果) (转)
- OpenCV学习:改变图像的对比度和亮度
- C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)