当前位置: 首页 > news >正文

ubuntu22.04@laptop OpenCV Get Started: 004_cropping_image

ubuntu22.04@laptop OpenCV Get Started: 004_cropping_image

  • 1. 源由
  • 2. Cropping应用Demo
  • 3 image_crop
    • 3.1 C++应用Demo
    • 3.2 Python应用Demo
    • 3.3 重点过程分析
      • 3.3.1 裁剪图像
      • 3.3.2 描绘矩形
  • 4. 总结
  • 5. 参考资料
  • 6. 补充

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.jpg2 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.jpg1 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 描绘矩形

  • rectangle(img, pt1, pt2, color, thickness, lineType, shift)

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》的记录也是过程。因此,很多重复的代码或者注释,就不会展开讨论,甚至提及。

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

相关文章:

  • MySQL数据库⑨_事务(四个属性+回滚提交+隔离级别+MVCC)
  • 记一次页面接口502问题:“502 Bad Gateway”
  • 【docker 的常用命令——详细讲解】
  • 内网穿透工具
  • web3知识体系汇总
  • 用HTML5 + JavaScript绘制花、树
  • 力扣精选算法100道——【模板】前缀和 (二维)
  • Swift Combine 有序的异步操作 从入门到精通十二
  • 算法刷题:盛水最多的容器
  • MogaNet:高效的多阶门控聚合网络
  • 怎么使用ChatGPT提高工作效率?
  • TypeScript 入门
  • 互联网加竞赛 基于深度学习的行人重识别(person reid)
  • 从Linux network namespace 认识 Docker 网络模型
  • C语言学习day13:嵌套循环+练习题(时钟+乘法表)
  • 网络传输文件的问题
  • Django 博客开发教程 8 - 博客文章详情页
  • JSDuck 与 AngularJS 融合技巧
  • JS字符串转数字方法总结
  • Linux下的乱码问题
  • Python 基础起步 (十) 什么叫函数?
  • Vue小说阅读器(仿追书神器)
  • 当SetTimeout遇到了字符串
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 前端学习笔记之观察者模式
  • 巧用 TypeScript (一)
  • 如何设计一个比特币钱包服务
  • 删除表内多余的重复数据
  • 使用agvtool更改app version/build
  • 一些css基础学习笔记
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 运行时添加log4j2的appender
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​TypeScript都不会用,也敢说会前端?
  • ​渐进式Web应用PWA的未来
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #每日一题合集#牛客JZ23-JZ33
  • (C++)八皇后问题
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (接口封装)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .Net 代码性能 - (1)
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET与 java通用的3DES加密解密方法
  • .NET中的十进制浮点类型,徐汇区网站设计
  • /proc/vmstat 详解
  • @AliasFor注解
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • []指针
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [2023-年度总结]凡是过往,皆为序章