ubuntu22.04@laptop OpenCV Get Started: 004_cropping_image
- [1. 源由](#1. 源由)
- [2. Cropping应用Demo](#2. Cropping应用Demo)
- [3 image_crop](#3 image_crop)
-
- [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 描绘矩形)
- [4. 总结](#4. 总结)
- [5. 参考资料](#5. 参考资料)
1. 源由
使用OpenCV进行裁剪相当于对NumPy数组做类似切片的动作。
每个图像都存储在2D阵列中,区域的高度和宽度(以像素为单位)就是一张对应的图片。
2. Cropping应用Demo
004_cropping_image是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_crop
3.1 C++应用Demo
C++应用Demo工程结构:
004_cropping_image/CPP$ tree .
.
├── CMakeLists.txt
├── image_crop.cpp
├── Patching
│ ├── saved_patches
│ ├── CMakeLists.txt
│ ├── patching.cpp
│ └── test_cropped.jpg
└── test.jpg
2 directories, 6 files
C++应用Demo工程编译执行:
$ mkdir build
$ cd build
$ cmake ..
$ cmake --build . --config Release
$ cd ..
$ ./build/image_crop
$ cd Patching
$ mkdir build
$ cd build
$ cmake ..
$ cmake --build . --config Release
$ cd ..
$ ./build/image_patch
3.2 Python应用Demo
Python应用Demo工程结构:
004_cropping_image/Python$ tree .
.
├── saved_patches
├── image_crop.py
├── patching.py
├── requirements.txt
├── test_cropped.jpg
└── test.jpg
1 directory, 5 files
Python应用Demo工程执行:
$ workoncv-4.9.0
$ python image_crop.py
$ python patching.py
3.3 重点过程分析
3.3.1 裁剪图像
- img(Range(start_row, end_row), Range(start_col, end_col))
- cropped = img[start_row:end_row, start_col:end_col]
第一个参数:行 (高度, 自上而下递增)
第二个参数:列 (宽度, 自左往右递增)
C++:
// Crop image
// First Range(20,500) is for y coordinates and the second is for x respectively
Mat cropped_image = img(Range(80,280), Range(150,330));
Python:
# Cropping an image
cropped_image = img[80:280, 150:330]
3.3.2 描绘矩形
C++:
rectangle(img, Point(x,y), Point(x1,y1), Scalar(0,255,0), 1);
Python:
cv2.rectangle(img, (x, y), (x1, y1), (0, 255, 0), 1)
4. 总结
通过对NumPy二维数组操作,对图像进行剪裁,使用rectangle
函数进行矩形框的绘制。
5. 参考资料
【1】ubuntu22.04@laptop OpenCV Get Started