【OpenCV学习笔记04】- 绘图功能

内容

  • 用 OpenCV 画不同的几何图形
  • 学习这些函数:cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText() 等。

函数常用传参

在上述所有功能中,您将看到一些常见的参数,如下所示:

  • img:您要绘制形状的图像对象;
  • color:形状的颜色,如 BGR,它是一个元组,例如:蓝色(255,0,0)。对于灰度图,只需传一个标量值。
  • thickness:线或圆等的粗细。如果对闭合图形(如圆)传递-1 ,它将填充形状。默认thickness= 1。
    lineType:线条类型,如 8 连接,抗锯齿线等。默认情况下,它是 8 连接。cv.LINE_AA 画出抗锯齿线,非常好看的曲线。

画线

去画一条线,你需要传递线条的开始和结束的坐标。我们将创建一个黑色图像,并在左上角到右下角画一条蓝色的线。
示例代码:

import numpy as np
import cv2 as cv# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
# 画一条 5px 宽的蓝色对角线
cv.line(img, (0, 0), (511, 511), (255, 0, 0), 5)cv.imshow("线条", img)
cv.waitKey(0)
cv.destroyWindow("线条")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述

画矩形

画一个矩形,你需要矩形的左上角和右下角。这次我们将会在图像的右上角画一个绿色的矩形。
示例代码:

import numpy as np
import cv2 as cv# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
# 画矩形
cv.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)
cv.imshow("矩形", img)
cv.waitKey(0)
cv.destroyWindow("矩形")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述

画实心圆

画一个圆,你需要它的圆心和半径。我们将在上面绘制的矩形上画一个内圆。
示例代码:

import numpy as np
import cv2 as cv# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
# 画矩形
cv.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)# 画圆
cv.circle(img, (447, 63), 63, (0, 0, 255), -1)
cv.imshow("画圆", img)
cv.waitKey(0)
cv.destroyWindow("画圆")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述

画圆的边

画一个圆,你需要它的圆心和半径。我们将在上面绘制的矩形上画一个圆的边。主要是改变cv.circle的thickness参数。上面用的实心圆用的是-1,这里我们改成3。
示例代码:

import numpy as np
import cv2 as cv# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
cv.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)# 画圆
cv.circle(img, (447, 63), 63, (0, 0, 255), 3)
cv.imshow("画圆", img)
cv.waitKey(0)
cv.destroyWindow("画圆")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述

画椭圆

画一个椭圆,你需要传好几个参数。一个参数是圆心位置 (x,y)。下个参数是轴的长度 (长轴长度,短轴长度)。角度是椭圆在你逆时针方向的旋转角度。startAngle 和 endAngle 表示从长轴顺时针方向测量的椭圆弧的起点和终点。如整圆就传 0 和 360。更多细节请看 cv.ellipse() 的文档。下面是在这个图像中间画的一个半椭圆例子。
示例代码:

import numpy as np
import cv2 as cv# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)# 画椭圆
# 只能画出椭圆一半,也就是圆转椭圆只计算了一半的角度
# 效果见,图1
# cv.ellipse(img, (256, 256), (100, 50), 0, 0, 180, 255, -1)
# 画出椭圆需要计算360角度
# 效果见,图2
cv.ellipse(img, (256, 256), (100, 50), 0, 0, 360, 255, -1)cv.imshow("画椭圆", img)
cv.waitKey(0)
cv.destroyWindow("画椭圆")
# cv.destroyAllWindows()

效果图:
图1:
在这里插入图片描述
图2:
在这里插入图片描述

画多边形

画多边形,首先你需要顶点的做坐标。将这些点组成一个形状为 ROWSx1x2 的数组,ROWS 是顶点数,它应该是 int32 类型。这里我们绘制一个顶点是黄色的小多边形。
示例代码:

import numpy as np
import cv2 as cv# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)# 画多边形
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv.polylines(img, [pts], True, (0, 255, 255))cv.imshow("画多边形", img)
cv.waitKey(0)
cv.destroyWindow("画多边形")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述
注意:

  • 如果第三个参数为False,您将获得一条连接所有点的折线,而不是闭合形状。
  • cv.polylines() 能画很多线条。只需创建你想绘制所有线条的列表,然后将其传给这个函数。所有线条都将单独绘制。绘制一组线条比多次调用 cv.line() 效率更高。

给图像加文字

在图像上加文字,你需要指定以下内容。

  • 你想写的文字数据。
  • 你想写的位置坐标 (如 左下角开始)。
  • 字体类型 (支持的字体,查看 cv.putText() 文档)
  • 常规的如颜色,粗细,线型等。为了更好看,线型使用 lintType =cv.LINE_AA

我们将在图像上写一个白色的 OpenCV 。
示例代码:

import numpy as np
import cv2 as cv# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)# 给图像加文字
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img, 'OpenCV', (10, 400), font, 4, (255, 255, 255), 2, cv.LINE_AA)cv.imshow("给图像加文字", img)
cv.waitKey(0)
cv.destroyWindow("给图像加文字")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“程序员面试之道:成为求职战场上的不可忽视的力量“

文章目录 每日一句正能量前言面试经历面试技巧后记 每日一句正能量 看淡拥有,不刻意追求某些东西,落叶归根,那些属于你的,总会回来。 前言 在现代科技发展日新月异的时代,程序员无疑扮演着重要的角色。他们是代码的创…

非常漂亮的外贸网站完整代码,适合机械加工和金属零件等领域。

非常漂亮的外贸网站完整代码,适合机械加工和金属零件等领域。整站代码,上传到服务器虚拟主机即可使用。 独家原创资源。源码是asp开发的,数据库是access,主流的虚拟主机空间都支持asp,直接上传就可以使用。 站长保证…

Transformers 2023年度回顾 :从BERT到GPT4

人工智能已成为近年来最受关注的话题之一,由于神经网络的发展,曾经被认为纯粹是科幻小说中的服务现在正在成为现实。从对话代理到媒体内容生成,人工智能正在改变我们与技术互动的方式。特别是机器学习 (ML) 模型在自然语言处理 (NLP) 领域取得…

【低照度图像增强系列(3)】EnlightenGAN算法详解与代码实现

前言 ☀️ 在低照度场景下进行目标检测任务,常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题,给检测带来一定的难度。 🌻使用图像增强模块对原始图像进行画质提升,恢复各类图像信息,再使用目标检…

想学习云计算么?教你如何免费白嫖微软和AWS的云资源一年

在这个数字化飞速发展的时代,云计算已成为IT行业的未来趋势。作为一名渴望进步的IT专业人员,掌握云计算不仅意味着技能的提升,更是升职加薪、拓宽职业道路的重要跳板。这里教你如何免费利用微软Azure和亚马逊AWS的云资源,为期一年…

mysql之导入导出远程备份

文章目录 一、navicat导入导出二、mysqldump命令导入导出2.1导出2.1.1 导出表数据和表结构2.1.2 只导出表结构() 2.2 导入(使用mysqldump导入 包含t _log表的整个数据库 共耗时 20s;)方法一:方法二: 三、LOAD DATA INFILE命令导入导出(只针对单表)设置导…

unity编辑器Scene界面输出位置及路径

工程Asset下新建Editor文件夹; Editor文件夹下新建脚本LogPosition using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; public class LogPosition : EditorWindow {//最终输出的数据.static string logtext;//增…

SpringBoot学习(五)-Spring Security配置与应用

注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!! Spring Security Spring Security是一个基于Java的开源框架,用于在Java应用程…

36-javascript输出方式,弹框:普通,confirm弹框,prompt弹框,控制台输出:普通,warm,error

1.页面打印 <body><p>你真是一个小机灵鬼</p><script>// 页面打印document.write("打印内容");</script> </body> 2.覆盖文档 <body><p>你真是一个小机灵鬼</p><script>// 覆盖文档window.onload f…

互斥、自旋、读写锁的应用场景

互斥、自旋、读写锁的应用场景 锁&#x1f512;1、互斥锁、自旋锁2、读写锁&#xff1a;读写的优先级3、乐观锁和悲观锁总结&#xff1a; 锁&#x1f512; ​ 多线程访问共享资源的生活&#xff0c;避免不了资源竞争而导致错乱的问题&#xff0c;所以我们通常为了解决这一问题…

c++在结构(Struct)中使用栈(Stack)

栈实现 1.入栈 2.出栈 3.空栈 4.满栈 5.栈顶 完整栈实现源码: // // myStack.hpp // algo_demo // // Created by Hacker X on 2024/1/9. //#ifndef myStack_hpp #define myStack_

力扣——C语言:合并两个有序数组

88. 合并两个有序数组 - 力扣&#xff08;LeetCode&#xff09; 这道题有多种方法可以解决 一、暴力求解 这种方法最简单&#xff0c;我们只需要把两个数组合在一起然后在冒泡排序就可以了 代码如下&#xff1a; void merge(int* nums1, int nums1Size, int m, int* nums2…