详解在OpenCV中如何使用图像像素


Posted in Python onMarch 03, 2022

详解在OpenCV中如何使用图像像素

像素是计算机视觉中图像的重要属性。它们是表示图像中特定空间中光的颜色强度的数值,是图像中数据的最小单位。

图像中的像素总数是高度、宽度和通道的乘积。

由于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)

详解在OpenCV中如何使用图像像素

请注意,我使用索引值对字母列表进行切片。例如,传递起始索引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坐标。

详解在OpenCV中如何使用图像像素

正如你所看到的,plt.imshow函数返回读取的图像以及x和y轴的坐标值。

然后,我们可以检索感兴趣区域(黑星)的起始和结束坐标值。

追踪黑星区域的坐标值

详解在OpenCV中如何使用图像像素

这幅图像显示了如何追踪黑星周围区域的坐标。

我们可以从图像中检索坐标(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()

输出:显示加载的图像。

详解在OpenCV中如何使用图像像素

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))

输出:显示图像的空间尺寸。

详解在OpenCV中如何使用图像像素

3.裁剪图像

裁剪出图像的左上角

# 裁剪图像的左上角
# 高度从原点到中心
# 宽度从原点到中心
 
top_left = image[originY:centerY, originX:centerX]
cv2.imshow("Top-Left Corner", top_left)
cv2.waitKey(0)

输出:图像的左上角

详解在OpenCV中如何使用图像像素

裁剪出图像的右上角

# 裁剪右上角
# 高度从原点到中心
# 宽度从中心到右上角(宽度)
 
top_right = image[originY:centerY, centerX:width]
cv2.imshow("Top-Right Corner", top_right)
cv2.waitKey(0)

输出:图像的右上角

详解在OpenCV中如何使用图像像素

裁剪出图像的左下角

# 裁剪左下角
# 高度从中心到左下角(高度)
# 宽度从中心到右上角(宽度)
 
bottom_left = image[centerY:height, originX:centerX]
cv2.imshow("Bottom-Left Corner", bottom_left)
cv2.waitKey(0)

输出:图像的左下角

详解在OpenCV中如何使用图像像素

裁剪出图像的右下角

# 裁剪右下角
# 高度从中心到左下角(高度)
# 宽度从中心到右上角(宽度)
 
bottom_right = image[centerY:height, centerX:width]
cv2.imshow("Bottom-Right Corner", bottom_right)
cv2.waitKey(0)

输出:左下角。

详解在OpenCV中如何使用图像像素

4.使用尺寸将部分图像设置为特定颜色。

# 设置原始图像的左上角为绿色
image[originY:centerY, originX:centerX] = (0, 255, 0)
 
# 显示更新后的图像
cv2.imshow("Updated", image)
cv2.waitKey(0)

输出:将左上角设置为绿色

详解在OpenCV中如何使用图像像素

总结

图像像素是表示图像中颜色强度的数值。使用OpenCV获取和设置不同图像处理的图像像素的过程基于Numpy阵列的切片操作。切片像素值在裁剪、重置、复制或增强图像时非常有用。

以上就是详解在OpenCV中如何使用图像像素的详细内容,更多关于OpenCV图像像素的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python命令行参数解析OptionParser类用法实例
Oct 09 Python
Python中实现常量(Const)功能
Jan 28 Python
python实用代码片段收集贴
Jun 03 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
Python入门之后再看点什么好?
Mar 05 Python
Python常用爬虫代码总结方便查询
Feb 25 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
Django 用户认证Auth组件的使用
Nov 30 Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 Python
一篇文章带你搞懂Python类的相关知识
May 20 Python
 Python 中 logging 模块使用详情
Mar 03 #Python
分享7个 Python 实战项目练习
Mar 03 #Python
python工具dtreeviz决策树可视化和模型可解释性
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
python机器学习实现oneR算法(以鸢尾data为例)
Mar 03 #Python
详解python的异常捕获
Mar 03 #Python
分享提高 Python 代码的可读性的技巧
Mar 03 #Python
You might like
php 判断服务器操作系统的类型
2014/02/17 PHP
php使用session二维数组实例
2014/11/06 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
2017/07/26 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
python基础之入门必看操作
2017/07/26 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
python中spy++的使用超详细教程
2021/01/29 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
个人求职信范文分享
2013/12/13 职场文书
大学四年职业生涯规划书范文
2014/01/02 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
统计学教授推荐信
2014/09/18 职场文书
高考升学宴答谢词
2015/01/20 职场文书
电影红河谷观后感
2015/06/11 职场文书
市级三好生竞选稿
2015/11/21 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
MySQL分区表实现按月份归类
2021/11/01 MySQL
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis