详解在OpenCV中如何使用图像像素
作者:woshicver 发布时间:2022-05-04 16:05:08
像素是计算机视觉中图像的重要属性。它们是表示图像 * 定空间中光的颜色强度的数值,是图像中数据的最小单位。
图像中的像素总数是高度、宽度和通道的乘积。
由于OpenCV中的图像被读取为像素值的Numpy数组,因此可以使用数组切片操作获取并处理由该区域的像素表示的图像区域。
切片操作用于检索序列子集,如列表、元组和数组,因此可用于获取图像区域的像素值,以便进行编辑、格式化或裁剪等处理。
切片操作
脚本:使用切片操作获取列表的子集。
# 切片字母列表
letters = ['a', 'b', 'c', 'd', 'e']
# 头三个字母
first_three = letters[:3]
# 最后三个字母
last_three = letters[-3:]
# 得到第二个到第四个字母
second_to_fourth = letters[1:4]
# 显示结果
print('First three letters: ', first_three)
print('Last three letters: ', last_three)
print('Second to fourth letters: ', second_to_fourth)
请注意,我使用索引值对字母列表进行切片。例如,传递起始索引1(列表中第二个字母的索引)和4将返回列表的一个片段,从第二个值到第四个值。
由于索引值用于以这种方式检索子集,因此它们也用于定位和检索图像中感兴趣的区域。
以图像中的区域为目标的切片由图像的两个轴(水平(X)和垂直(Y))的起始值和结束值定义,格式如下:
image[startY: endY, startx:endX]
它返回所需感兴趣区域的(图像像素的)Numpy数组。
那么,我们如何确定感兴趣区域的X轴和Y轴的起始值和结束值?
这些值(startX、endX、startY、endY)是映射出感兴趣区域的坐标值。
使用OpenCV显示时,这些值不会显示在图像旁边,但我们可以使用其他应用程序(如Photoshop、Corel Draw、Paint e.t.c)或其他python可视化库(如Matplotlib)来显示具有X和Y坐标值的图像。
一如既往,这在实践中得到了更好的理解。让我们使用matplotlib显示一个图像。pyplot,我们可以从中检索坐标,这些坐标映射出图像中的目标感兴趣区域。
我用加纳共和国国旗的图像来证明这一点。在这里,我的目标是图像中围绕黑星的区域。
获取感兴趣区域的坐标值
使用Matplotlib加载并显示图像
# 导入matplotlib的plot
import matplotlib.pyplot as plt
# 加载和显示原始图像
image = plt.imread('Flag_of_Ghana.png')
# 显示图片
plt.imshow("Original", image)
plt.plot()
输出:加载的图像及其X和Y坐标。
正如你所看到的,plt.imshow函数返回读取的图像以及x和y轴的坐标值。
然后,我们可以检索感兴趣区域(黑星)的起始和结束坐标值。
追踪黑星区域的坐标值
这幅图像显示了如何追踪黑星周围区域的坐标。
我们可以从图像中检索坐标(startY(y1)、endY(y2)、startX(x1)、endX(x2))。然后,我们可以定义两个轴的起点和终点坐标,并裁剪为:
image[y1: y2, x1:x2]
if we get y1, y2 = [145, 295] and x1, x2 = [245, 400]
那么绘制出黑星的区域将是:
black_star = image[145:295, 245:400]
这将返回映射感兴趣区域(本例中为黑星)的像素值(在Numpy数组中)。
现在,我们可以利用这种技术对图像区域进行定位和切片,以进行各种图像处理。
使用切片操作裁剪图像
1.加载并显示原始图像
# 导入matplotlib的plot
import matplotlib.pyplot as plt
# 加载和显示原始图像
image = plt.imread('Flag_of_Ghana.png')
# 显示图片
plt.imshow("Original", image)
plt.plot()
输出:显示加载的图像。
2.获取图像的空间维度
# 获取图像的空间尺寸
# 初始化
originY, originX = 0, 0
# 获取图像的高度和宽度
height, width = image.shape[:2]
# 计算图像的中心
(centerX, centerY) = (width // 2, height // 2)
print('Image height: ', height)
print('Image width: ', width)
print('Center location: ', (centerY, centerX))
输出:显示图像的空间尺寸。
3.裁剪图像
裁剪出图像的左上角
# 裁剪图像的左上角
# 高度从原点到中心
# 宽度从原点到中心
top_left = image[originY:centerY, originX:centerX]
cv2.imshow("Top-Left Corner", top_left)
cv2.waitKey(0)
输出:图像的左上角
裁剪出图像的右上角
# 裁剪右上角
# 高度从原点到中心
# 宽度从中心到右上角(宽度)
top_right = image[originY:centerY, centerX:width]
cv2.imshow("Top-Right Corner", top_right)
cv2.waitKey(0)
输出:图像的右上角
裁剪出图像的左下角
# 裁剪左下角
# 高度从中心到左下角(高度)
# 宽度从中心到右上角(宽度)
bottom_left = image[centerY:height, originX:centerX]
cv2.imshow("Bottom-Left Corner", bottom_left)
cv2.waitKey(0)
输出:图像的左下角
裁剪出图像的右下角
# 裁剪右下角
# 高度从中心到左下角(高度)
# 宽度从中心到右上角(宽度)
bottom_right = image[centerY:height, centerX:width]
cv2.imshow("Bottom-Right Corner", bottom_right)
cv2.waitKey(0)
输出:左下角。
4.使用尺寸将部分图像设置为特定颜色。
# 设置原始图像的左上角为绿色
image[originY:centerY, originX:centerX] = (0, 255, 0)
# 显示更新后的图像
cv2.imshow("Updated", image)
cv2.waitKey(0)
输出:将左上角设置为绿色
来源:https://blog.csdn.net/woshicver/article/details/123244053


猜你喜欢
- 摘要: 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一般ASP模板加载模板文件(加载组
- 本文实例为大家分享了wxPython实现计算器的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*-######
- 今天在打开sql server 的时候打不开。报了一个错误,然后我打开sql server配置管理器,就看到了如下图这个错误。然后就去网上搜
- 用Python来编写机器学习方面的代码是相当简单的,因为Python下有很多关于机器学习的库。其中下面三个库numpy,scipy,matp
- wxPython是Python语言的一套优秀的GUI图形库。允许Python程序员很方便的创建完整的、功能键全的GUI用户界面。 wxPyt
- 一、vim python自动补全插件:pydiction 可以实现下面python代码的自动补全:1.简单python关键词补全 2.pyt
- 内部存储格式:世纪、年、月、日、小时、分钟、秒默认格式是:DD-MON-RR。SYSDATE 返回当前的系统时间。SELECT S
- 方法一:使用装饰器装饰器维护一个字典对象instances,缓存了所有单例类,只要单例不存在则创建,已经存在直接返回该实例对象。def si
- 本文主要讨论如何计算 tensorflow 和 pytorch 模型的 FLOPs。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务
- 应用OpenCV和Python进行SIFT算法的实现如下图为进行测试的gakki101和gakki102,分别验证基于BFmatcher、F
- 存储文件的重要一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,。 默认数据是加载到
- 引言今天在使用Pytorch导入此前保存的模型进行测试,在过程中发现输出的结果与验证结果差距甚大,经过排查后发现是forward与eval(
- 在网上查找大量资料,经过自己的不懈努力,终于测试成功了。原来要在服务器上安装mysql odbc 3.51 ,还有数据库用户名及密码,用下面
- 对于当前数据库的监控方式有很多,分为数据库自带、商用、开源三大类,每一种都有各自的特色;而对于 mysql 数据库由于其有很高的社区活跃度,
- 本文实例讲述了Python操作MySQL数据库。分享给大家供大家参考,具体如下:1、安装通过Python连接MySQL数据库有很多库,这里使
- odeJs 微信公众号功能开发,移动端 H5页面调用微信的支付功能。这几天根据公司的需要使用 node 和 h5页面调用微信的支付功能完成支
- 对于一些快速迭代的产品来说,特别是移动端 C端产品,基于用户运营的目的,在 app首页给用户展示各种各样的弹窗是很常见的事情,在产品初期,由
- 本文实例讲述了Python实现堆排序的方法。分享给大家供大家参考,具体如下:堆排序作是基本排序方法的一种,类似于合并排序而不像插入排序,它的
- 环境搭建1.首先需要自行安装node环境2.然后全局安装 expressnpm install -g express3.创建express项
- 一、opencv是什么?OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库.二、使用步骤1.引入库代码如下:import cv2