详解在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编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
May 31 Python
python的常用模块之collections模块详解
Dec 06 Python
解决sublime+python3无法输出中文的问题
Dec 12 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
如何使用Python实现自动化水军评论
Jun 26 Python
face++与python实现人脸识别签到(考勤)功能
Aug 28 Python
python dataframe NaN处理方式
Dec 26 Python
Python装饰器的应用场景代码总结
Apr 10 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
想学画画?python满足你!
Dec 24 Python
python基础之停用词过滤详解
Apr 21 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+DBM的同学录程序(2)
2006/10/09 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
python中__call__内置函数用法实例
2015/06/04 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
最新的大学生找工作自我评价
2013/09/29 职场文书
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
销售员自我评价
2015/03/11 职场文书
学校计划生育责任书
2015/05/09 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技