ubuntu22.04@laptop OpenCV Get Started: 004_cropping_image

部署运行你感兴趣的模型镜像

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
【2】ubuntu22.04@laptop OpenCV安装
【3】ubuntu22.04@laptop OpenCV定制化安装

6. 补充

学习是一种过程,对于前面章节学习讨论过的,就不在文中重复了。

有兴趣了解更多的朋友,请从《ubuntu22.04@laptop OpenCV Get Started》开始,一个章节一个章节的了解,循序渐进。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

当执行 `sudo mount -o loop ubuntu.img /mnt/ubuntu_img` 命令时出现 `failed to setup loop device for ubuntu.img` 错误,可尝试以下解决办法: #### 检查镜像文件是否存在和损坏 要确保 `ubuntu.img` 文件确实存在于当前目录,并且没有损坏。可以使用 `ls` 命令查看文件是否存在: ```bash ls ubuntu.img ``` 若文件存在,可通过计算文件的哈希值并与原始哈希值对比来检查文件是否损坏,例如使用 `md5sum` 或 `sha256sum`: ```bash md5sum ubuntu.img sha256sum ubuntu.img ``` #### 检查循环设备是否可用 循环设备可能被其他进程占用,导致无法为镜像文件设置循环设备。可以使用以下命令查看当前正在使用的循环设备: ```bash losetup -a ``` 若发现有未使用但仍然挂载的循环设备,可以使用以下命令卸载并删除该循环设备: ```bash sudo umount /dev/loopX sudo losetup -d /dev/loopX ``` 其中 `/dev/loopX` 是具体的循环设备名称。 #### 手动创建循环设备 若自动创建循环设备失败,可以尝试手动创建。首先使用 `losetup` 命令将镜像文件关联到一个循环设备: ```bash sudo losetup /dev/loop0 ubuntu.img ``` 然后再进行挂载操作: ```bash sudo mount /dev/loop0 /mnt/ubuntu_img ``` #### 检查系统内核支持 确保系统内核支持循环设备。一般现代 Linux 内核都支持循环设备,但在某些特殊情况下可能会被禁用。可以通过以下命令检查内核模块是否加载: ```bash lsmod | grep loop ``` 若未加载,可以使用以下命令加载: ```bash sudo modprobe loop ``` #### 检查磁盘空间和权限 确保挂载点 `/mnt/ubuntu_img` 所在的磁盘有足够的空间,并且当前用户有足够的权限进行挂载操作。可以使用 `df -h` 命令查看磁盘空间使用情况: ```bash df -h /mnt ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值