3小时精通opencv(三)图片裁剪与形状绘制

news2024/11/15 6:04:53

3小时精通opencv(三)图片裁剪与形状绘制

参考视频资源:3h精通Opencv-Python

文章目录

  • 3小时精通opencv(三)图片裁剪与形状绘制
    • 图片裁剪
    • 绘制形状
      • 绘制直线
      • 绘制矩形
      • 绘制圆形
      • 绘制文字
    • 整体代码


图片裁剪

图片裁剪不需要使用opencv中特有的函数, 对于opencv中读取到的图像, 直接当做矩阵来处理即可, 使用切片的操作就相当于对图像进行了裁剪

import cv2
import numpy as np

img = cv2.imread('Resources/lambo.PNG')
print(img.shape) # (462, 623, 3)

img_resize = cv2.resize(img, (500, 300))
print(img_resize.shape) # (300, 500, 3)

img_crop = img[0:200, 200:500]

cv2.imshow('image', img)
# cv2.imshow('image resize', img_resize)
cv2.imshow('image crop', img_crop)
cv2.waitKey(0)

在这里插入图片描述

绘制形状

图像绘制较为简单, 看一下参数的英文大概就知道需要输入什么了

可以应用于目标检测中绘制预测框和标注预测类别等功能

绘制直线

import cv2
import numpy as np

img = np.zeros((512, 512, 3), np.uint8)
# 画线
cv2.line(img, (0, 0), (100, 300), (0, 255, 0), 3)  # 从0,0 到 300,300 的线 宽度为3
# cv2.line(img, (0, 0), (img.shape[1], img.shape[0]), (0, 255, 0), 3)  # 从0,0 到 300,300 的线 宽度为3
cv2.imshow('Image', img)
cv2.waitKey(0)

在这里插入图片描述
通常需要使用前5个参数

  • img: 输入的图像
  • pt1: 线段的起始坐标
  • pt2: 线段的结束坐标
  • color: 线段的颜色
  • thickness: 线段的粗细

拓展: opencv中的坐标
在这里插入图片描述

绘制矩形

import cv2
import numpy as np

img = np.zeros((512, 512, 3), np.uint8)
# 画矩形
cv2.rectangle(img, (0, 0), (250, 350), (0, 0, 255), 2)  # opencv的坐标默认先x轴后y轴, 即先width再height
# cv2.rectangle(img, (0, 0), (250, 350), (0, 0, 255), cv2.FILLED)  # 填充矩形区域
cv2.rectangle()
cv2.imshow('Image', img)
cv2.waitKey(0)

在这里插入图片描述
通常需要使用前5个参数

  • img: 输入的图像
  • pt1: 矩形的左上角坐标
  • pt2: 矩形的右下角坐标
  • color: 矩形外框的颜色
  • thickness: 矩形外框的粗细 (如果设置为cv2.FILLED表示填充当前的矩形区域)

在这里插入图片描述

绘制圆形

import cv2
import numpy as np

img = np.zeros((512, 512, 3), np.uint8)
# 画圆形
cv2.circle(img, (400, 100), 50, (255, 255, 0), 5)
cv2.imshow('Image', img)
cv2.waitKey(0)

在这里插入图片描述
通常需要使用前5个参数

  • img: 输入的图像
  • center: 圆形坐标
  • radius: 半径大小
  • color: 外框颜色
  • thickness: 外框粗细 (如果设置为cv2.FILLED表示填充当前区域)
    在这里插入图片描述

绘制文字

解决绘制时中文汉字乱码问题参考博文

import cv2
import numpy as np

img = np.zeros((512, 512, 3), np.uint8)
# 文字
cv2.putText(img, 'Hello Opencv', (50, 200), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 255), 1)  # 一个为字体大小, 一个为字体粗细
cv2.putText(img, 'Hello Opencv', (50, 300), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 255), 1)
cv2.putText(img, 'Hello Opencv', (50, 400), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 255), 2)

cv2.imshow('Image', img)
cv2.waitKey(0)

在这里插入图片描述
通常需要使用的参数

  • img: 输入的图像
  • text: 文字内容
  • org: 起始坐标(左上角)
  • fontFace: 字体
  • fongScale: 字体大小
  • color: 颜色
  • thickness: 字体粗细
    在这里插入图片描述

整体代码

裁剪图片

import cv2
import numpy as np

img = cv2.imread('Resources/lambo.PNG')
print(img.shape)

img_resize = cv2.resize(img, (500, 300))
print(img_resize.shape)

img_crop = img[0:200, 200:500]

cv2.imshow('image', img)
# cv2.imshow('image resize', img_resize)
cv2.imshow('image crop', img_crop)
cv2.waitKey(0)


绘制图形

import cv2
import numpy as np

img = np.zeros((512, 512, 3), np.uint8)
# print(img.shape)
# img[100:200, 200:500] = 255, 0, 0  # 蓝色

# 画线
# cv2.line(img, (0, 0), (300, 300), (0, 255, 0), 3)  # 从0,0 到 300,300 的线 宽度为3
cv2.line(img, (0, 0), (img.shape[1], img.shape[0]), (0, 255, 0), 3)  # 从0,0 到 300,300 的线 宽度为3
# cv2.rectangle(img, (0, 0), (250, 350), (0, 0, 255), 2)  # opencv的坐标默认先x轴后y轴, 即先width再height
cv2.rectangle(img, (0, 0), (250, 350), (0, 0, 255), cv2.FILLED)  # 填充矩形区域
cv2.circle(img, (400, 100), 50, (255, 255, 0), 5)
cv2.putText(img, 'Hello Opencv', (50, 200), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 255), 1)  # 一个为字体大小, 一个为字体粗细
cv2.putText(img, 'Hello Opencv', (50, 300), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 255), 1)
cv2.putText(img, 'Hello Opencv', (50, 400), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 255), 2)

cv2.imshow('Image', img)
cv2.waitKey(0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/175754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

15. python数据类型转换

1. 隐式类型转换 - 自动完成 在隐式类型转换中,Python 会自动将一种数据类型转换为另一种数据类型,不需要我们去干预。 (1) 以下实例中,我们对两种不同类型的数据进行运算,较低数据类型(整数)就会转换为较…

java 探花交友项目day4 MongoDB

数据库表 接口定义 其他都比较简单 我们讲黑名单查询页面的设计 DubboService public class BlackListApiImpl extends ServiceImpl<BlackListMapper,BlackList> implements BlackListApi{Autowiredprivate BlackListMapper blackListMapper;Autowiredprivate UserInf…

Allegro如何输出坐标文件操作指导

Allegro如何输出坐标文件操作指导 PCB在SMT的时候会需要用坐标文件,Allegro支持输出坐标文件,如下图 具体操作如下 选择Tools选择report出现repor

LINUX学习之正则表达式(十二)

普通正则 元字符 元字符匹配描述.匹配除了换行符以外的任意单个字符*前导字符出现0次或连续多次.*任意长度字符^行首(以…开头)$行尾(以…结尾)^$空行[]匹配括号里任意单个字符或一组单个字符[^]匹配不包含括号里任一单个字符或一组单个字符^[]匹配以括号里任意单个字符或一组…

Python技能树-推导式

Python 列表推导式(1) Python 独步天下的推导式表达式&#xff0c;使用列表推导式过滤出偶数列表 # -*- coding: UTF-8 -*- if __name__ __main__:list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print()print("# 使用列表推导式过滤出偶数")# TODO(you): 请在此实现过滤代…

Allegro如何添加平衡铜操作指导

Allegro如何添加平衡铜操作指导 PCB在加工的时候,工厂会添加平衡铜,Allegro支持自动加上平衡铜,如下图 具体操作如下 选择Manufacture点击Thieving

比较器: Comparable 与 Comparator 区别

比较器&#xff1a; Comparable 与 Comparator 区别 每博一文案 师父说: 人不能精得过火&#xff0c;太精明的人往往让人生厌&#xff0c;人也别傻的可怜&#xff0c;一腔热血付出却白忙一场。 太精明的人&#xff0c;凡事都想要争个明明白白&#xff0c;每一分钱都要和人计较…

macOS Ventura 13.1 系统问题:掉电快 充电慢

今年一月份升级了 MBA 的系统&#xff0c;之后的笔记本&#xff1a; 使用过程&#xff1a;电量不禁用&#xff0c;掉电很快。 充电过程&#xff1a;很慢。而且存在一定几率&#xff1a;电量充到某个值&#xff08;如30%&#xff09;之后不管再充多久还是这个电量值。 系统信息…

HDFS高可用单NameNode从standby恢复为active(二)

1、背景 有一个hdfs高可用集群&#xff0c;因为某些操作&#xff0c;导致其中一个namenode的信息全部丢失了。最后只剩下一个完整的namenode信息和datanode信息。于是在在启动hdfs后发现独有的namenode始终处于standby状态。即使通过hdfs haadmin -transitionToActive命令也不能…

java面向接口编程2023027

那就再进一步&#xff1a;面向接口编程 面向接口编程前面已经提到&#xff0c;接口体现的是一种规范和实现分离的设计哲学&#xff0c;充分利用接口可以极好地降低程序各模块之间的耦合&#xff0c;从而提高系统的可扩展性和可维护性。 基于这种原则&#xff0c;很多软件架构设…

Leetcode——第 329 场周赛

题目链接&#xff1a; 交替数字和 根据第 K 场考试的分数排序 执行逐位运算使字符串相等 拆分数组的最小代价 题目描述 交替数字和 给你一个正整数 n 。n中的每一位数字都会按下述规则分配一个符号&#xff1a; 最高有效位 上的数字分配到 正 号。 剩余每位上数字的符号都与…

学习记录666@项目管理之项目质量管理

什么项目质量管理 所谓项目质量&#xff0c;是项目满足需求的程度&#xff1b;所谓质量管理&#xff0c;就是为了使项目满足需求的程度足够高或者是合适程度下而进行的一系列管理活动。 包括规划质量管理、实施质量保证、质量控制三个方面。 规划质量管理 规划质量管理主要…

JUC面试(七)——CountDownLatchCyclicBarrierSemaphore

CountDownLatch 概念 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒 CountDownLatch主要有两个方法&#xff0c;当一个或多个线程调用await方法时&#xff0c;调用线程就会被阻塞。其它线程调用CountDown方法会将计数器减1&#xff08;调用CountDown方法的线程不会被…

nacos源码分析==客户端从服务端读取配置文件-服务端服务注册

客户端从服务端读取配置文件 客户端启动的时候会扫描到boostrap.yml中的信息&#xff0c;扫描到标签ConditionalOnProperty会将NacosConfigBootstrapConfiguration 中的bean注入。其中NacosConfigProperties就是读取的boostrap.yml中spring.cloud.nacos.config下的配置项。Nac…

“深度学习”学习日记。与学习有关的技巧--权重的初始值

2023.1.22 在深度学习的学习中&#xff0c;权重的初始值特别重要。这关系到神经网络的学习能否成功&#xff1b; 在以前误差反向传播法和神经网络学习的算法实现这两篇文章中&#xff0c;对权重的初始值的确定是这样的&#xff1a; class TwoLayerNet:def __init__(self, inp…

在2022年的最后一天我学会了哈希表

文章目录前言STL相关容器unordered_setunordered_map哈希表哈希冲突闭散列开散列STL相关容器的模拟实现用一个哈希表改造两个容器哈希表的迭代器总结前言 首先先提前祝贺大家新年快乐&#xff01;本文是农历2022年的最后一篇博客。而今天我们介绍的也是STL里面重要的一个数据结…

2023年, 前端路上的开源总结(最新更新...)

19年至今, 笔者利用空余时间陆陆续续做了一些开源项目, 大部分开源项目都是以实际价值为开源基础, 所以我觉得有必要做一个总结和复盘,在复盘的过程中希望也能对大家有所帮助.今后笔者的开源项目都会放在这篇文章中,如果想学习的可以收藏交流.1. 基于react实现的滑动验证码组件…

[LeetCode周赛复盘] 第 96 场双周赛20230121

[LeetCode周赛复盘] 第 96 场双周赛20230121 一、本周周赛总结二、 [Easy] 6300. 最小公共值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6275. 使数组中所有元素相等的最小操作数 II1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6302. 最大子序列的分数1. 题目描述2. 思…

【JavaScript】33_对象的序列化----JSON

3、对象的序列化 对象的序列化 JS中的对象使用时都是存在于计算机的内存中的 序列化指将对象转换为一个可以存储的格式 在JS中对象的序列化通常是一个对象转换为字符串&#xff08;JSON字符串&#xff09;序列化的用途&#xff08;对象转换为字符串有什么用&#xff09;&…

Linux嵌入式开发——文件系统结构

文章目录Linux嵌入式开发——文件系统结构一、根目录“/”二、Ubuntu文件系统结构三、绝对路径和相对路径Linux嵌入式开发——文件系统结构 一、根目录“/” ​ Linux下“/”就是根目录&#xff01;所有的目录都是由根目录衍生出来的。 二、Ubuntu文件系统结构 /bin 存放二进…