opencv python教程简书_OpenCV-Python系列二:常用的图像属性

对于图像,我们经常需要知道关于图像的特殊属性,比如宽度,高度,面积,像素点数目等等,那么在opencv-python中,这些信息如何获取呢?

本文结构:

1.基本图像属性

2. 对于opencv中的特殊数据类型

3. 图像的矩

1. 图像的基本属性

图像的宽度、高度

首先,opencv通过下面的方式获取图像内容

img = cv2.imread('bgrImage.jpg', -1)#-1-以图像原格式,0-灰度格式,1-三通道格式, OpenCV使用的BGR三通道格式

opencv-python中使用cv2.imread()函数读取图像信息,数据类型为numpy.ndarray,不能通过img.cols, img.rows来获取(C++版本cv::Mat的方式),通常会采用下面的方式获取图像的宽度,高度,通道数。

row, col, channel = img.shape #返回一个tuple(row, col, channel)

图像的像素数目,数据类型

pixels = img.size

img_data_type = img.dtype#uint8等

对像素点的索引

px = img[10, 10]

print(px)# [ 84 188 155]

px = img[10, 10, 0]

print(px) # 84

我们可以通过上面的方式实现对图像元素进行操作, 当你对处理速度有要求,可以使用img.item(row, col, channel)来获取元素和使用img.itemset((row, col, channel), val)来修改元素。

2. 对于opencv中的特殊数据类型

这里主要参考着C++版本的OpenCV库,比如cv::Point, cv::Rect, cv::Scalar, 此外还有一些如cv::Point3i, Vec4i等,在某些函数使用到时对应即可。在opencv-python中,使用numpy的数据格式进行处理,并不存在Point, Rect, Scalar这些特殊的概念,而是将其一般化了, 比如在绘制圆的时候:

cv2.circle(img, (x, y), radius, color, thickness) #opencv的官方教程速度还真比不上百度

对于圆心,直接使用一个tuple类型就行,不再有cv::Point这样的特殊数据类型,这样对于传参的时候灵活了不少。

对于矩形cv::Rect,在python版本中绘制rectangle则无法使用传递(x, y, w, h)这样的格式,只存有(x0, y0), (x1, y1)这样传递左上和右下点信息来完成

cv2.rectangle(img, (x0, y0), (x1, y1), color, line_width)

对于外接矩形,直接通过x, y, w, h来获取矩形的信息

x, y, w, h = cv2.boundingRect(contour)

对于cv::Scalar,也直接使用tuple来表示了,如:

img_mean = cv2.mean(img)# (127.549025, 127.6246, 127.67580000000001, 0.0)

返回一个长度为4的tuple,这对应C++的cv::Scalar.

3. 图像的矩

对于图像处理,我们的目的是提取图像特征信息,不论是选取ROI(感兴趣区域),还是滤波,边缘提取等等,而且我们希望提取的特征受到噪声,几何形变,光线的影响越少越好,这样的特征存在么?幸运的是,还真发现了这样的特征--不变矩。

在OpenCV中,关于矩的使用常用在下面几个地方:

计算轮廓的质心

# 常伴随cv2.findContours()使用,cv2.moments第一个参数为点集

img_moments = cv2.moments(contour)

# 计算质心centroid坐标信息cent_x和cent_y

cent_x = int(img_moments['m10']/img_moments['00'])

cent_y = int(img_moments['m01']/img_moments['00'])

通过比较轮廓的矩来进行目标的匹配

对于opencv-python的基础数据类型,有问题欢迎留言, Have Fun With OpenCV-Python, 下期见。

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

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

相关文章

C++静态成员函数指针

C的静态成员函数指针 先简单的说说非静态的成员函数。 非静态成员函数指针的类型: 类的非静态成员是和类的对象相关的。也就是说,要通过类的对象来访问变量。 成员函数的类型定义为: typedef void (A::*pfunc)(); A是一个类,有一个成员函数…

Windows下C语言连接Oracle数据库

为什么80%的码农都做不了架构师?>>> 最近公司有个项目需要用到Oracle数据库,我负责前期的调研。由于项目要用到C和PHP两种语言,所以先收集这两种语言连接Oracle的方法。PHP使用的是Laravel框架,直接使用了Laravel-OCI…

SU suspecfk命令学习

用suplane生成平面,并查看其FK谱, 水平反射界面经FK变换后,波数为0, 正好处于临界,乃奎斯特频率, 有空间假频, Over,不足之处,欢迎批评指正。 转载于:https://www.cnblog…

dblink查询_分库数据如何查询统计

分库后的计算不能直接使用SQL;异构库 SQL 函数不尽相同;JAVA 硬编码实施难度大;即使借助透明网关访问远程数据库,分库性能优化也是头疼问题。一般常规办法:方法1:java硬编码简单的跨库count运算&#xff0c…

python 爬取大乐透开奖结果

#codingutf-8 #下面中文注释不支持 所以开头加 "#codingutf-8" # 获取近期大乐透开奖结果, 并给出自己猜中的个数import requests# 这个API能够免费得到近期开奖结果, url里的-20代表获取近20期的开奖信息 url "http://f.apiplus.net/dlt-20.json" re…

【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

类的继承案例解析&#xff0c;python相关知识延伸 作者&#xff1a;白宁超 2016年10月10日22:36:57 摘要&#xff1a;继<快速上手学python>一文之后&#xff0c;笔者又将python官方文档认真学习下。官方给出的pythondoc入门资料包含了基本要点。本文是对文档常用核心要点…

课堂练习之小强大扫荡

标题&#xff1a;在将程序安装到新的手机上时会出现程序崩溃 解决&#xff1a;1、找出错误&#xff1a;经过一系列测试&#xff0c;发现问题出现在第一次访问数据库的代码时报错。错误原因为不能发现数据库中的建立的表。 2、如何解决&#xff1a;在主页面加入访问数据库语句。…

领域驱动设计:软件核心复杂性应对之道_人人都可以领域驱动设计(一)

最近几年&#xff0c;领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;这个术语越来越多地出现在软件工程师的视野里。对DDD不熟悉的人可能会觉得它是软件领域里的一个新的概念&#xff0c;但是实际上&#xff0c;Eric Evans在十几年前就已经提出了这…

linux 进程通信 消息队列

详解linux进程间通信-消息队列 前言&#xff1a;前面讨论了信号、管道的进程间通信方式&#xff0c;接下来将讨论消息队列。 一、系统V IPC 三种系统V IPC&#xff1a;消息队列、信号量以及共享内存&#xff08;共享存储器&#xff09;之间有很多相似之处。 每个内核中的 I P …

laravel框架——composer导入laravel

第一种&#xff1a;  composer create-project --prefer-dist laravel/laravel projectName "5.2.*"第二种&#xff1a;  composer global require "laravel/installer"  laravel new 名称转载于:https://www.cnblogs.com/xj76149095/p/5951822.html…

第七章 心得体会

通过第七章的学习&#xff0c;使自己对驱动程序的认识更加深刻&#xff0c;LED灯的驱动程序帮我我学到很多&#xff0c;还学会了驱动的移植。 学到的知识&#xff1a; 一、编写LED驱动 1、创建LED驱动的设备文件 第一步&#xff1a;使用cdev_init函数初始化cdev leds_cdev.owne…

wx.checkjsapi是写在config里面吗_用Python写一个程序,解密游戏内抽奖的秘密

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者&#xff1a; 极客挖掘机PS&#xff1a;如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun分析需求我们先整理下思…

Dev C++安装第三方库boost

Dev_C安装第三方库boost 安装步骤 准备工作下载boost库&#xff0c;下载地址https://sourceforge.net/projects/boost/1. 设置GCC的环境变量PATH 设置环境变量path,在其中加上DEV-C编译器的路径&#xff08;gcc.exe所在路径&#xff09;&#xff0c;如C:\Program Files (x86)…

bash的一些小技巧

1、从输入读入变量 eg:read -ep "input yes or no: " flag 用e选项表示编辑&#xff0c;可以使用backspace删除 2、数组 a、索引数组 declare -a arr(var1 var2 var3) 用空格分割&#xff0c;如果直接访问变量$arr&#xff0c; 则获取的是数组的第一个元素&#xff0…

golang switch_为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?

点击上方“我要学编程”&#xff0c;选择“置顶/星标公众号”福利干货&#xff0c;第一时间送达&#xff01;来自 | C语言Plus请用5秒钟的时间查看下面的代码是否存在bug。OK&#xff0c;熟练的程序猿应该已经发现Bug所在了&#xff0c;在第13行下面我没有添加关键字break; 这就…

RabbitMQ 安装与简单使用

在企业应用系统领域&#xff0c;会面对不同系统之间的通信、集成与整合&#xff0c;尤其当面临异构系统时&#xff0c;这种分布式的调用与通信变得越发重要。其次&#xff0c;系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方&#xff0c;比如发送短信&#…

数据库函数依赖及范式

一、基础概念   要理解范式&#xff0c;首先必须对知道什么是关系数据库&#xff0c;如果你不知道&#xff0c;我可以简单的不能再简单的说一下&#xff1a;关系数据库就是用二维表来保存数据。表和表之间可以……&#xff08;省略10W字&#xff09;。   然后你应该理解以下…

windows svn

windows svn 1.1Svn和VisualSvn介绍 VisualSvn Server2.5.6&#xff08;版本控制服务器&#xff09;免费开源软件 是基于Windows平台上的Subversion服务器&#xff0c;它是免费的 官方下载&#xff1a; http://www.visualsvn.com/files/VisualSVN-Server-2.5.6.msi TortoiseSvn…

信息摘要技术及算法介绍

数据摘要算法是密码学算法中非常重要的一个分支&#xff0c;它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能&#xff0c;由于其不可逆性&#xff0c;有时候会被用做敏感信息的加密。 数据摘要算法也被称为哈希&#xff08;Hash&#xff09;算法、散列算法…

AutoLayout的那些事儿

AutoLayout非常强大也非常易用&#xff0c;可读性也很强&#xff0c;加上各种第三方AutoLayout库&#xff0c;让你布起局来犹如绷掉链子的狗&#xff01;根本停不下来&#xff01;以前的 1label.frame.origin.y label.frame.size.height 10如今只用&#xff1a; 123button.sn…