概要: 众嗦粥汁所周知,在如今计算机视觉(Computer Version short for CV)是人工智能与机器人技术发展的一个重大研究方向,而opencv作为一个专门为机器视觉编程提供技术与函数支持的第三方库,自然是一个需要重点研究的内容。

本期所要介绍的函数是opencv库中的函数——rectangle

rectangle函数的主要作用是给指定的区域加上矩形边框,使图片即将要处理的目标区域可视化,这样就便于我们对要目标区域在处理时,有了一个同步的了解,便于我们在调试的同时查找问题所在。(双密码,双空间,工作生活分别存储,互不干扰。记住:跑得快不一定赢,不跌跟头才是成功。8***钛金rectangle)对于图片中某一区域的标识将会帮助我们更好地识别,我们将要处理或是已经处理完的部分,使得我们在进行图片识别与修正时有一个提前或同步的判别,是一个较为实用的工具。

本期为了展示rectangle函数的目标框选的有效性与醒目性,我们将请出《饥荒联机版》中的全部可游玩角色(鱼妹和老奶奶还没买,你懂的,V我30,我带你们打龙蝇)来作为我们这次的测试素材嘉宾。我们将通过看到在合照中,他们分别被矩形框选的效果,来进一步学习rectangle函数的使用方法。话不多说,我是Kamen Black君,马上开始今天的学习,我已经等不及力。

正文部分:

print("祝大家每天快乐,love and peace!")

①使用准备:

与前几期一样,依旧是调用我们的工具人老伙伴----opencv,作为我们使用rectangle的大前提。

import cv2

②适用情况:

当对目标区域的位置存在疑惑,或者是需要对处理后的裁剪区域进行判别时,我们就可以使用rectangle函数来对图像中的某一区域来进行框选标识,来判断被框选的区域是否是我们想要的区域。

前者(存在疑惑)是对用户自我提前选定的区域进行验证,属于检验用户自我判别,rectangle函数表示范围选择的参数是用户自我给定的;

后者(裁剪判别)是对程序处理后的裁剪结果进行判别,属于检验程序运行结果,rectangle函数表示范围选择的参数是程序对图像进行处理之后的结果。

这两种情况都能够通过rectangle函数直观明了地展现在用户的面前,使得在之后调试的过程避免出现同样的问题。

(很好与优秀只差一点点距离,这段距离叫安全。错标会提醒,误识就报警,目标不忘带,错误不泄露。8***钛金rectangle)

③语法说明:

使用语法:cv2.rectangle (img, pt1, pt2, color, thickness, lineType, shift)

参数说明:img:我们要进行目标框选的源图像,三通道、单通道的图像都可以(大概吧);

pt1、pt2:我们选定的矩形在图像上的一条对角线的两个端点坐标(即矩形位于同一条对角线上两个顶点的坐标),用一个二值元组(x,y)的形式来进行表示(x表示列坐标,从左往右逐渐增大;y表示行坐标,从上往下逐渐增大)(在这里引一个流向大家介绍我的另一篇文章《python中参数与图片高度、宽度的对应关系》,这其中介绍了python中不同情况下,参数与图片高度、宽度的对应关系,有兴趣或是相关需求的小伙伴可以去看一下);

color:我们选择用来作为框选矩形的边框颜色,通常是一个三值元组,表示一个颜色RGB三通道的值(要注意:元组中三个值先后对应的是B通道、G通道、R通道,在RGB表中查询到的颜色要进行颠倒,才能得到我们原先想要的颜色);如果是灰度图的话,我们也可以选择亮度来表示边框的颜色;

thickness:我们选择的框选矩形的粗细情况,默认为1像素值,通常可以选择一个具体的整数进行表示(正数展示相应的像素值的线条宽度;负数,如cv2.FILLED则表示矩形将框选区域全部填满(黑化了bushi),可以用来将一些噪声从目标区域中祛除);

lineType:我们挑选的矩形边框的线条类型,可选择CV2.LINE_8(默认)(8连通)、CV2.LINE_4(4连通)、CV2.LINE_AA;如果指定为CV2.LINE_AA,则是使用高斯滤波器画反锯齿线,有着增加线条平滑性的效果(黄金比例立体切割,荷兰进口小牛皮,视网膜极致平滑,8***钛金rectangle)。一般情况下,或者说没有特殊需求时,我们其实不太用得到这个参数。对于lineType还有如下的文字说明:

The function line draws the line segment between pt1 and pt2 points in the image. The line is clipped by the image boundaries. For non-antialiased lines with integer coordinates, the 8-connected or 4-connected Bresenham algorithm is used. Thick lines are drawn with rounding endings. Antialiased lines are drawn using Gaussian filtering. To specify the line color, you may use the macro CV_RGB(r, g, b)

shift:我们选择的将矩形移动的程度,默认为0(即不操作),可以选择一个整数n,操作将使得pt1、pt2的坐标值都除以2^n。如选择1,即相当于将pt1、pt2的坐标值都除以2;如果选择的是2,则都除以4,即2^2。这个操作将使得用户可以仅通过一对固定的坐标值,就可以进行不同区域的框选,使之可以互相比较,抑或改变侧重,仿佛运筹帷幄。

成功并不是高瞻远瞩,而是你本来就站在高处,运筹帷幄,掌控未来,这才是8***,这才是胸怀天下。顶峰的目标,钛金的气概,真皮的情怀,让我们向成功的人生致敬,8***rectangle

下面另外附上rectangle函数相关说明的原生文档,以供参考:

def rectangle(img: Mat, pt1, pt2, color, thickness=..., lineType=..., shift=...)
from __doc__"""'rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) -> img  .  @brief Draws a simple, thick, or filled up-right rectangle..  The function cv::rectangle draws a rectangle outline or a filled rectangle whose two opposite corners  .  are pt1 and pt2. .  @param img Image.  .  @param pt1 Vertex of the rectangle. .  @param pt2 Vertex of the rectangle opposite to pt1.  .  @param color Rectangle color or brightness (grayscale image). .  @param thickness Thickness of lines that make up the rectangle. Negative values, like #FILLED,   .  mean that the function has to draw a filled rectangle.  .  @param lineType Type of the line. See #LineTypes  .  @param shift Number of fractional bits in the point coordinates..  rectangle(img, rec, color[, thickness[, lineType[, shift]]]) -> img
@overload .  use `rec` parameter as alternative specification of the drawn rectangle: `r.tl() and r.br()-Point(1,1)` are opposite corners'"""pass

④实例操作:

下面通过几个简单的操作,给大家呈现一下参数不同的情况下对图片框选结果的不同(饥荒人物见面会(bushi)):

1、蛋黄淡黄的头发的温蒂:

import cv2img=cv2.imread("src.png")
cv2.rectangle(img,(65,48),(236,240),(170,234,242),5,lineType=cv2.LINE_AA)
cv2.imshow("result",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、脾气火爆(物理)的薇洛(不要问我为什么火女为什么没换装,要问,就是懒bushi):

import cv2img=cv2.imread("src.png")
cv2.rectangle(img,(835,32),(1044,245),(60,65,170),5,lineType=cv2.LINE_AA)
cv2.imshow("result",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3、神经质知识渊博的图书管理员:

import cv2img=cv2.imread("src.png")
cv2.rectangle(img,(400,14),(528,240),(117,172,124),5,lineType=cv2.LINE_AA)
cv2.imshow("result",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

4、胆小如鼠力大如牛的沃尔夫冈:

import cv2img=cv2.imread("src.png")
cv2.rectangle(img,(243,447),(380,657),(65,129,190),5,lineType=cv2.LINE_AA)
cv2.imshow("result",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5、老阴B伟大的魔术师——麦斯威尔:

import cv2img=cv2.imread("src.png")
cv2.rectangle(img,(792,251),(920,451),(236,232,231),-1,lineType=cv2.LINE_AA)
cv2.imshow("result",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(哦,他去哪儿了?哦,原来,伟大的魔术师是会大变活人的,连自己也不在话下。大家如果有不认识的,可以看看前面的图。实际上主要是我不喜欢这个老阴B,如果不是因为这个老阴B,谁会来饥荒大陆这种破地方(我会bushi))

结语:本期中我们学习了rectangle函数,了解到opencv中如何使用rectangle来进行图像标记,使得我们可以判断被框选的区域是否是我们想要的区域,进行相应的自我验证或是对程序运行结果的判断。其实在opencv中还有其他的绘图函数,如line函数(线条)、circle函数(圆形)、ellipse函数(椭圆)、polylines函数(多边形)以及putText函数(文字),感兴趣的同学可以自己前去了解一下,实现的原理和rectangle其实都大同小异。

好了以上就是所有的内容,希望大家多多关注,点赞,收藏,这对我有很大的帮助。谢谢大家了!

好了,这里是Kamen Black君。祝国康家安,大家下次再见喽!!!溜溜球~~

最后送给大家一句话:你,与众不同,你喜欢超越。你有梦想,你有力量,你从不把成就作为终点,记住,你的名字叫做:成功!8***钛金**

python-opencv第五期:rectangle函数详解相关推荐

  1. python中zip的使用_浅谈Python中的zip()与*zip()函数详解

    前言 1.实验环境: Python 3.6: 2.示例代码地址:下载示例: 3.本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables ...

  2. Python+NetworkX画图的nx.draw_networkx(函数详解)

    Python+NetworkX画图的nx.draw_networkx函数详解 Python+NetworkX画图的nx.draw_networkx(函数详解) Python+NetworkX画图的nx ...

  3. python中argparse模块关于 parse_args() 函数详解(全)

    目录 前言 1. 函数讲解 2. 基本用法 3. 实战讲解 前言 原理:命令行解析使用argparse包 作用:命令行传参赋值 可用在机器学习深度学习 或者 脚本运行等 了解这个函数需要了解其背后的原 ...

  4. ​【Python入门】Python数学math模块55个函数详解

    Python math 模块提供了许多对浮点数的数学运算函数.主要包括以下几个部分 数论与表示函数 幂函数与对数函数 三角函数 角度转换 双曲函数 特殊函数 常量 import math print( ...

  5. python中zip什么意思_浅谈Python中的zip()与*zip()函数详解 python的zip函数加上一个*号,是什么含义...

    python 当中的zip( )函数到底是干嘛的?你越来越善解人意,就没人在意你的委屈和脾气. zip([1,2,3],['a','b','c']) 结果是 [(1, 'a'), (2, 'b'), ...

  6. opencv中imgproc库中函数详解(1)

    BaseColumnFilter 单列核的基础滤波器. [cpp] view plaincopy class BaseColumnFilter { public: virtual ~BaseColum ...

  7. python中的range()函数详解

    首先说明一下range()函数: 在python中range()函数是一个内建函数:这个内建函数用起来还是很方便的,只不过有些细节的地方我在这里写一写!供大家交流! (1)记录如下: 既然上面的明白了 ...

  8. 【Python】sklearn 中的 make_blobs() 函数详解

    文章目录 一.介绍 二.函数的使用 一.介绍 make_blobs() 是 sklearn.datasets中的一个函数. 主要是产生聚类数据集,产生一个数据集和相应的标签. 函数的源代码如下: de ...

  9. php调用python程序的五种方法及详解

    方法一 exec ( string $command [, array &$output [, int &$return_var ]] ) : string 备注: exec有3个参数 ...

最新文章

  1. 【Scrapy】OAuth 学习笔记
  2. 编程格式注意事项---后期慢慢补充
  3. 关于滤波电容、去耦电容、旁路电容作用
  4. Material Design(九)--CoordinatorLayout和App Bar
  5. 问题的提出方式。(【先】说出最关键的【结果】,然后再描述细节)
  6. 【tyvj】【dp】回文词(IOI2000)
  7. Java中的MD5加密
  8. Meteor在手机上运行
  9. 集异璧(GEB)第一章WU谜题读后感
  10. C语言 完数问题求解
  11. Word技能-更改 Normal 模板 (Normal.dotm)
  12. 2023年核桃仁行业产业布局:全球核桃仁产量稳步增长
  13. 基于JAVA springboot + MYSQL +VUE的项目管理系统(含数据库),包括工时统计、原型预览、效果图管理等
  14. wps生成正态分布的随机数_WPS中用excel做正态分析.doc
  15. win10分屏快捷键无法使用_Win10 1909碰上多任务如何快速四分屏 Win10 1909分屏快捷键无效怎么办...
  16. word中自动生成的目录中,编号和文本间距过大
  17. 【Java基础】基础概念与常识
  18. 运行时错误‘-2147467259(80004005)’
  19. 关于Debian10的网络配置
  20. 【定语从句练习题】 which 修饰句子

热门文章

  1. 【Golang】golang实现sha256加密函数
  2. 服务器部署Vue脚手架工程,以及遇到的问题总结
  3. Tcpview的使用
  4. 科技赋能,携手创新,菊风成功中标温州银行音视频平台采购项目
  5. 澳门风云剧情介绍 主演:周润发 谢霆锋 杜汶泽
  6. 开干洗店怎么摆脱淡季的困扰?
  7. 【数字图像处理】实验一 图像处理基本操作
  8. 视觉SLAM —— 李群与李代数
  9. 一起做网店里的情侣汉服商品图片及视频怎么保存
  10. 双拼自然码如何使用辅助码