open cv学习 (三) 绘制图形和文字

news/2024/11/18 8:16:08/

绘制图形和文字

demo1
# 绘制线段
import cv2
import numpy as np
# 创建一个300×300 3通道的图像
canvas = np.ones((300, 300, 3), np.uint8)*255
# 绘制一条直线起点坐标为(50, 50)终点坐标为(250,50),颜色的BGR值为(255, 0, 0)(蓝色),粗细为5
canvas = cv2.line(canvas, (50, 50), (250, 50), (255, 0, 0), 5)# 绘制一条直线起点坐标为(50, 150)终点坐标为(250,150),颜色的BGR值为(0, 255, 0)(绿色),粗细为10
canvas = cv2.line(canvas, (50, 150), (250, 150), (0, 255, 0), 10)# 绘制一条直线起点坐标为(50, 250)终点坐标为(250,250),颜色的BGR值为(0, 0, 255)(红色),粗细为15
canvas = cv2.line(canvas, (50, 250), (250, 250), (0, 0, 255), 15)# 绘制一条直线起点坐标为(150, 50)终点坐标为(150,250),颜色的BGR值为(0, 255, 255)(黄色),粗细为20
canvas = cv2.line(canvas, (150, 50), (150, 250), (0, 255, 255), 5)cv2.imshow("Lines", canvas)
cv2.waitKey()
cv2.destroyAllWindows()
demo2
# 绘制矩形
import cv2
import numpy as npcanvas = np.zeros((300, 300, 3), np.uint8)# 在图像上绘制一个左上角坐标为(50, 50)、右下角坐标为(200, 150)、青色的、线条宽度为20的举行边框,最后一个参数为-1时绘制出一个实心举行
canvas = cv2.rectangle(canvas, (50, 50), (200, 150), (255, 255, 0), 5)
cv2.imshow("img", canvas)
cv2.waitKey()
cv2.destroyAllWindows()
demo3
# 绘制正方形
import numpy as np
import cv2
canvas = np.zeros((300, 300, 3), np.uint8)
canvas = cv2.rectangle(canvas, (50, 50), (250, 250), (0, 0, 255), 40)
canvas = cv2.rectangle(canvas, (90, 90), (210, 210), (0, 255, 0), 30)
canvas = cv2.rectangle(canvas, (120, 120), (180, 180), (255, 0, 0), 20)
canvas = cv2.rectangle(canvas, (140, 140), (160, 160), (0, 255, 255), -1)
cv2.imshow("img", canvas)
cv2.waitKey()
cv2.destroyAllWindows()
demo4
# 绘制交通灯
import numpy as np
import cv2canvas = np.zeros((100, 300, 3), np.uint8)
canvas = cv2.circle(canvas, (50, 50), 40, (0, 0, 255), -1)
canvas = cv2.circle(canvas, (150, 50), 40, (0, 255, 255), -1)
canvas = cv2.circle(canvas, (250, 50), 40, (0, 255, 0), -1)cv2.imshow("circle", canvas)
cv2.waitKey()
cv2.destroyAllWindows()
demo5
# 绘制同心圆import  numpy as np
import cv2canvas = np.zeros((300, 300, 3), np.uint8)
# 圆心的横坐标等于画布宽度的一半,center_X是圆心的横坐标
center_X = int(canvas.shape[1]/2)
center_Y = int(canvas.shape[0]/2)for r in range(0, 150, 30):cv2.circle(canvas, (center_X, center_Y), r, (0, 255, 0), 5)
cv2.imshow("Circles", canvas)
cv2.waitKey()
cv2.destroyAllWindows()
demo6
# 绘制27个随机的圆import numpy as np
import cv2canvas = np.zeros((300, 300, 3), np.uint8)
for numbers in range(0, 28):# 获得随机的圆心横坐标,这个坐标在(0, 299)内取值center_X = np.random.randint(0, high=300)# 获得随机的圆心纵坐标,这个坐标在(0, 299)内取值center_Y = np.random.randint(0, high=300)# 获得最忌的半径,这个半径在(11, 70)内取值radius = np.random.randint(11,high=71)# 获得随机的线条颜色,这个颜色在(0, 255)取值color = np.random.randint(0, high=256, size=(3,)).tolist()# 绘制一个圆心坐标为(center_X, center_Y)圆cv2.circle(canvas, (center_X, center_Y), radius, color, -1)cv2.imshow("Circles", canvas)
cv2.waitKey()
cv2.destroyAllWindows()
demo7
# 绘制等腰梯形
import numpy as np
import cv2
canvas = np.zeros((300, 300, 3), np.uint8)pts = np.array([[100, 50], [200, 50], [50, 250], [250, 250]], np.int32)canvas = cv2.polylines(canvas, [pts], True, (0, 0, 255), 5)cv2.imshow("img", canvas)
cv2.waitKey()
cv2.destroyAllWindows()
demo8
# 绘制文字
import numpy as np
import cv2
canvas = np.zeros((100, 300, 3), np.uint8)
fontStyle = cv2.FONT_HERSHEY_DUPLEX + cv2.FONT_ITALIC
cv2.putText(canvas, "mrsoft", (20, 70), fontStyle, 2, (0, 255, 0), 5)
cv2.imshow("img", canvas)
cv2.waitKey()
cv2.destroyAllWindows()
demo9
import cv2
import time
import numpy as np
# 画面的宽和高
width, height = 200, 200
# 圆半径
r = 20
# 圆心横坐标起始坐标
x = r + 20
# 圆心纵坐标起始坐标
y = r + 100
# 每一帧的移动速度
x_offer = y_offer = 4while cv2.waitKey(-1) == -1:if x > width - r or x < r:x_offer *= -1if y > height-r or y < r:y_offer *= -1x += x_offery += y_offerimg = np.ones((width, height, 3), np.uint8)*255cv2.circle(img, (x, y), r, (255, 0, 0), -1)cv2.imshow("img", img)time.sleep(1/60)
cv2.destroyAllWindows()

http://www.ppmy.cn/news/1041510.html

相关文章

CF1003A Polycarp‘s Pockets 题解

题目传送门 题目意思&#xff1a; 给你 n n n 个数&#xff0c;求出最多相同的数的个数。 这道题目有两种解法。 方法一&#xff1a;桶排 一边输入&#xff0c;一边将第 i i i 个数 a i a_i ai​ 出现的次数存在一个数组 b b b 的第 a i a_i ai​ 个位置。输入完后遍历…

Channel是什么?FileChannel类的常用方法

Channel 是一个接口对象,它类似于传统的流对象,但与传统的流对象又有些不同&#xff0c;具体表现如下: • Channel可以异步地执行I/O读写操作。 • Channel的读写操作是双向的,既可以从 Channel中读取数据,又可以写数据到Channel,而流的读写操作通常都是单向的。 • Channel…

9,模板、类模板、高级宏替换、单例、内联inline、强制内联FORCEINLINE、重命名typedf

模板 const模板函数模板和任意参数结合的高级运用指针可以被当作数组使用 类模板类模板的匹配普通的类模板实例化的匹配类模板内存在函数的匹配 hpp文件模板指针 类模板和虚继承FORCEINLINE强制内联inline内联函数typedef重命名 类模板和多态高级宏替换和模板高级宏替换高级宏替…

【Java 动态数据统计图】动态数据统计思路Demo(动态,排序,containsKey)三(115)

上代码&#xff1a; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map;public class day10 {public static void main(String[] args) {List<Map<String,O…

视频汇聚/视频云存储/视频监控管理平台EasyCVR添加萤石云设备详细操作来啦!

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

GM65二维码识别模块+命令控制

简介 MG65 条码识读模块&#xff0c;一款性能优良的扫描引擎&#xff0c;不仅能够轻松读取各类一维条码&#xff0c;而且可以高速读取二维条码&#xff0c;对线性条形码具有非常高的扫描速率&#xff0c;针对纸质条码及显示屏上的条码&#xff0c;也都能轻松扫描。 一、模块参…

什么是边车

名词和概念定义 Sidecar&#xff1a;边车。微服务中数据平面的进程&#xff0c;负责转发应用、服务请求&#xff0c;并支持限流、熔断、负载均衡等特性。 Control-plane: 控制平面。微服务的配置中心&#xff0c;负责配置下发、数据搜集、服务发现等功能。 应用: 应用是指服务…

安装部署docker以及基本的操作

目录 一.安装与部署docker 1.1 关闭防火墙 1.2 安装依赖包 1.3 设置阿里云镜像源 1.4安装docker-ce社区版 二.设置镜像加速 三.网络优化 四.docker镜像操作 4.1 搜索镜像——docker search 镜像 4.2 下载镜像——docker pull 仓库名/镜像名&#xff1a;标签 4.3 查看已下载…