ubuntu22.04@laptop OpenCV Get Started: 003_image_resizing

ubuntu22.04@laptop OpenCV Get Started: 003_image_resizing

  • [1. 源由](#1. 源由)
  • [2. resize应用Demo](#2. resize应用Demo)
  • [3 image_resize](#3 image_resize)
    • [3.1 C++应用Demo](#3.1 C++应用Demo)
    • [3.2 Python应用Demo](#3.2 Python应用Demo)
    • [3.3 重点过程分析](#3.3 重点过程分析)
      • [3.3.1 根据宽高调整大小](#3.3.1 根据宽高调整大小)
      • [3.3.2 根据比例调整大小](#3.3.2 根据比例调整大小)
      • [3.3.3 根据插值方式调整大小](#3.3.3 根据插值方式调整大小)
  • [4. 总结](#4. 总结)
  • [5. 参考资料](#5. 参考资料)

1. 源由

在OpenCV中调整图像大小:

  • 要记住图像的原始纵横比(即宽高比)
  • 减小图像的大小,需要对像素缩减采样值。
  • 增加图像的大小,需要对新像素进行插值。

各种插值技术开始发挥作用来完成上述操作。

2. resize应用Demo

003_image_resizing是OpenCV调整图像比例的示例程序。

确认OpenCV安装路径:

复制代码
$ find /home/daniel/ -name "OpenCVConfig.cmake"
/home/daniel/OpenCV/installation/opencv-4.9.0/lib/cmake/opencv4/
/home/daniel/OpenCV/opencv/build/OpenCVConfig.cmake
/home/daniel/OpenCV/opencv/build/unix-install/OpenCVConfig.cmake


$ export OpenCV_DIR=/home/daniel/OpenCV/installation/opencv-4.9.0/lib/cmake/opencv4/

3 image_resize

3.1 C++应用Demo

C++应用Demo工程结构:

复制代码
003_image_resizing/CPP$ tree .
.
├── CMakeLists.txt
├── image.jpg
└── image_resize.cpp

0 directories, 3 files

C++应用Demo工程编译执行:

复制代码
$ mkdir build
$ cd build
$ cmake ..
$ cmake --build . --config Release
$ cd ..
$ ./build/image_resize

3.2 Python应用Demo

Python应用Demo工程结构:

复制代码
003_image_resizing/Python$ tree .
.
├── image.jpg
├── image_resize.py
└── requirements.txt

0 directories, 3 files

Python应用Demo工程执行:

复制代码
$ workoncv-4.9.0
$ python image_resize.py

3.3 重点过程分析

  1. src: It is the required input image, it could be a string with the path of the input image (eg: 'test_image.png').
  2. dsize: It is the desired size of the output image, it can be a new height and width.
  3. fx: Scale factor along the horizontal axis.
  4. fy: Scale factor along the vertical axis.
  5. interpolation: It gives us the option of different methods of resizing the image.

3.3.1 根据宽高调整大小

C++:

复制代码
// Set rows and columns
int up_width = 600;
int up_height = 400;
Mat resized_up;
//resize up
resize(image, resized_up, Size(up_width, up_height), INTER_LINEAR);

Python:

复制代码
# Set rows and columns
up_width = 600
up_height = 400
up_points = (up_width, up_height)
# resize the image
resized_up = cv2.resize(image, up_points, interpolation = cv2.INTER_LINEAR)

3.3.2 根据比例调整大小

C++:

复制代码
// Scaling Up the image 1.2 times by specifying both scaling factors
double scale_up_x = 1.2;
double scale_up_y = 1.2;
// Scaling Down the image 0.6 times specifying a single scale factor.
double scale_down = 0.6;
Mat scaled_f_up, scaled_f_down;
//resize 
resize(image,scaled_f_down, Size(), scale_down, scale_down, INTER_LINEAR);
resize(image, scaled_f_up, Size(), scale_up_x, scale_up_y, INTER_LINEAR);

Python:

复制代码
# Scaling Up the image 1.2 times by specifying both scaling factors
scale_up_x = 1.2
scale_up_y = 1.2
# Scaling Down the image 0.6 times specifying a single scale factor.
scale_down = 0.6
 
scaled_f_down = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_LINEAR)
scaled_f_up = cv2.resize(image, None, fx= scale_up_x, fy= scale_up_y, interpolation= cv2.INTER_LINEAR)

3.3.3 根据插值方式调整大小

  • INTER_AREA: INTER_AREA uses pixel area relation for resampling. This is best suited for reducing the size of an image (shrinking). When used for zooming into the image, it uses the INTER_NEAREST method.
  • INTER_CUBIC: This uses bicubic interpolation for resizing the image. While resizing and interpolating new pixels, this method acts on the 4×4 neighboring pixels of the image. It then takes the weights average of the 16 pixels to create the new interpolated pixel.
  • INTER_LINEAR: This method is somewhat similar to the INTER_CUBIC interpolation. But unlike INTER_CUBIC, this uses 2×2 neighboring pixels to get the weighted average for the interpolated pixel.
  • INTER_NEAREST: The INTER_NEAREST method uses the nearest neighbor concept for interpolation. This is one of the simplest methods, using only one neighboring pixel from the image for interpolation.

C++:

复制代码
# Scaling Down the image 0.6 using different Interpolation Method
Mat res_inter_linear, res_inter_nearest, res_inter_area;
resize(image, res_inter_linear, Size(), scale_down, scale_down, INTER_LINEAR);
resize(image, res_inter_nearest, Size(), scale_down, scale_down, INTER_NEAREST);
resize(image, res_inter_area, Size(), scale_down, scale_down, INTER_AREA);

Python:

复制代码
# Scaling Down the image 0.6 times using different Interpolation Method
res_inter_nearest = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_NEAREST)
res_inter_linear = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_LINEAR)
res_inter_area = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_AREA)

4. 总结

  • resize() 将图像源数据,通过参数指定的画面尺寸,进行相应的插值调整。

其他API函数:

  • imshow
  • imwrite
  • vconcat 数据源连接函数

5. 参考资料

【1】ubuntu22.04@laptop OpenCV Get Started

【2】ubuntu22.04@laptop OpenCV安装

【3】ubuntu22.04@laptop OpenCV定制化安装

相关推荐
QBoson17 分钟前
量子赋能多智能体路径规划:破解无人机、自动驾驶的 “避撞难题”
人工智能·自动驾驶·无人机·量子计算
ar01238 小时前
AR远程协助作用
人工智能·ar
北京青翼科技8 小时前
PCIe接口-高速模拟采集—高性能计算卡-青翼科技高品质军工级数据采集板-打造专业工业核心板
图像处理·人工智能·fpga开发·信号处理·智能硬件
软件聚导航9 小时前
马年、我用AI写了个“打工了马” 小程序
人工智能·ui·微信小程序
陈天伟教授10 小时前
人工智能应用-机器听觉:7. 统计合成法
人工智能·语音识别
笨蛋不要掉眼泪10 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
昨夜见军贴061610 小时前
IACheck AI审核技术赋能消费认证:为智能宠物喂食器TELEC报告构筑智能合规防线
人工智能·宠物
DisonTangor10 小时前
阿里开源语音识别模型——Qwen3-ASR
人工智能·开源·语音识别
万事ONES10 小时前
ONES 签约北京高级别自动驾驶示范区专设国有运营平台——北京车网
人工智能·机器学习·自动驾驶
qyr678911 小时前
深度解析:3D细胞培养透明化试剂供应链与主要制造商分布
大数据·人工智能·3d·市场分析·市场报告·3d细胞培养·细胞培养