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

目录
  • 切片操作
  • 获取感兴趣区域的坐标值
  • 使用切片操作裁剪图像
    • 1.加载并显示原始图像
    • 2.获取图像的空间维度
    • 3.裁剪图像
    • 4.使用尺寸将部分图像设置为特定颜色。
  • 总结

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

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

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

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

总结

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

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

(0)

相关推荐

  • Python OpenCV处理图像之图像像素点操作

    本文实例为大家分享了Python OpenCV图像像素点操作的具体代码,供大家参考,具体内容如下 0x01. 像素 有两种直接操作图片像素点的方法: 第一种办法就是将一张图片看成一个多维的list,例如对于一张图片im,想要操作第四行第四列的像素点就直接 im[3,3] 就可以获取到这个点的RGB值. 第二种就是使用 OpenCV 提供的 Get1D. Get2D 等函数. 推荐使用第一种办法吧,毕竟简单. 0x02. 获取行和列像素 有一下四个函数: cv.GetCol(im, 0): 返回第

  • 超详细注释之OpenCV更改像素与修改图像通道

    这篇博客将介绍使用Python,OpenCV获取.更改像素,修改图像通道,截取图像感兴趣ROI:单通道图,BGR三通道图,四通道透明图,不透明图: 1. 效果图 原图 VS 更改右下某个像素为红色,更改左上角1/4区域为绿色,效果图如下: 裁剪感兴趣区域:分别截取左上角.右上角.左下角.右下角,各占1/4:效果图如下: 原图 VS 图像单通道灰度图效果如下: 左上原图 VS 右上R通道图 VS 左下G通道图 VS 右下B通道图效果如下: 图像4通道 全透明图 VS 不透明效果图: 2. 源码 #

  • Python+OpenCV图片局部区域像素值处理详解

    背景故事:我需要对一张图片做一些处理,是在图像像素级别上的数值处理,以此来反映图片中特定区域的图像特征,网上查了很多,大多关于opencv的应用教程帖子基本是停留在打开图片,提取像素重新写入图片啊之类的基本操作,我是要取图片中的特定区域再提取它的像素值,作为一个初学者开始接触opencv简直一脸懵,慢慢摸索着知道了opencv的一些函数是可以实现的像SetImageROI()函数设置ROI区域,即感兴趣区域,就很好用啊,总之最后是实现了自己想要的功能.现在看个程序确实是有点挫,也有好多多余的没必

  • Python+OpenCV图片局部区域像素值处理改进版详解

    上个版本的Python OpenCV图片局部区域像素值处理,虽然实现了我需要的功能,但还是走了很多弯路,我意识到图片本就是数组形式,对于8位灰度图,通道数为1,它就是个二位数组,这样就没有必要再设置ROI区域,复制出来这块区域再循环提取像素存入数组进行处理了,可以直接将图片存入数组,再利用numpy进行切分相应的数组操作就可以了,这样一想就简单很多了,这篇我会贴出修改后的代码,直接省去了大段的代码啊. ps:这次我重新装的opencv3.2.0版本,代码里面直接用cv2了 # 查看opencv版

  • python+opencv像素的加减和加权操作的实现

    本文介绍了python+opencv像素的加减和加权操作的实现,分享给大家. # 目标: # 1.在图像上进行算术操作,如加减以及按位操作 # 2.将会学会使用cv2.add(),cv2.addWeights() # 参考网站:https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_image_arithmetics/py_image_arithmetics.html#image-arithmetics import numpy

  • Python OpenCV对图像像素进行操作

    目录 遍历并修改图像像素值 图像的加减乘除运算 遍历并修改图像像素值 在使用opencv处理图像时,有时需要对图像的每个像素点进行处理,比如取反.修改值等操作,就需要通过h和w遍历像素.依然以下图为例: 具体代码: import cv2 as cv import numpy as np def image_pixel(image_path: str): img = cv.imread(image_path, cv.IMREAD_COLOR) cv.imshow('input', img) h,

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

    目录 切片操作 获取感兴趣区域的坐标值 使用切片操作裁剪图像 1.加载并显示原始图像 2.获取图像的空间维度 3.裁剪图像 4.使用尺寸将部分图像设置为特定颜色. 总结 像素是计算机视觉中图像的重要属性.它们是表示图像中特定空间中光的颜色强度的数值,是图像中数据的最小单位. 图像中的像素总数是高度.宽度和通道的乘积. 由于OpenCV中的图像被读取为像素值的Numpy数组,因此可以使用数组切片操作获取并处理由该区域的像素表示的图像区域. 切片操作用于检索序列子集,如列表.元组和数组,因此可用于获

  • 详解在OpenCV中实现的图像标注技术

    目录 目录 图像注解 对图片注释的需求 图像注解的类型 分类法 物体检测 语义分割 用OpenCV实现图像注解 包围盒方法 KNN方法进行分割 结论 参考文献 图像标注在计算机视觉中很重要,计算机视觉是一种技术,它允许计算机从数字图像或视频中获得高水平的理解力,并以人类的方式观察和解释视觉信息.注释,通常被称为图片标签,是大多数计算机视觉模型发展中的一个关键阶段.本文将重点讨论在OpenCV的帮助下创建这些注释.以下是将要涉及的主题. 目录 图像注解 对图像注释的需求 图像注解的类型 用Open

  • 详解在Python中使用OpenCV进行直线检测

    目录 1.引言 2.霍夫变换 3.举个栗子 3.1读入图像进行灰度化 3.2执行边缘检测 3.3进行霍夫变换 补充 1. 引言 在图像处理中,直线检测是一种常见的算法,它通常获取n个边缘点的集合,并找到通过这些边缘点的直线.其中用于直线检测,最为流行的检测器是基于霍夫变换的直线检测技术. 2. 霍夫变换 霍夫变换是图像处理中的一种特征提取方法,可以识别图像中的几何形状.它将在参数空间内进行投票来决定其物体形状,通过检测累计结果找到一极大值所对应的解,利用此解即可得到一个符合特定形状的参数. 在使

  • 详解Python+OpenCV进行基础的图像操作

    目录 介绍 形态变换 腐蚀 膨胀 创建边框 强度变换 对数变换 线性变换 去噪彩色图像 使用直方图分析图像 介绍 众所周知,OpenCV是一个用于计算机视觉和图像操作的免费开源库. OpenCV 是用 C++ 编写的,并且有数千种优化的算法和函数用于各种图像操作.很多现实生活中的操作都可以使用 OpenCV 来解决.例如视频和图像分析.实时计算机视觉.对象检测.镜头分析等. 许多公司.研究人员和开发人员为 OpenCV 的创建做出了贡献.使用OpenCV 很简单,而且 OpenCV 配备了许多工

  • 详解C++ OpenCV实现图像拼接的原理及方法

    目录 前言 一.图像拼接相关原理 图像特征采集 特征提取算法 透视变换 透视矩阵 图像拷贝 二.案例实现 Step1:导入目标图片 Step2:特征点提取和匹配 Step3:图像配准 Step4:图像拷贝 Step5:图像融合 完整代码 三.总结 前言 本文以实现图像拼接为目标,把分割开的图像进行拼接还原,核心的内容包括:OpenCV图像拼接相关原理以及OpenCV图像拼接案例的实现 一.图像拼接相关原理 图像特征采集 一幅图中总存在着一些独特的像素点,这些点我们可以认为就是这幅图的特征,即为特

  • 详解Python OpenCV图像分割算法的实现

    目录 前言 1.图像二值化 2.自适应阈值分割算法 3.Otsu阈值分割算法 4.基于轮廓的字符分离 4.1轮廓检测 4.2轮廓绘制 4.3包围框获取 4.4矩形绘制 前言 图像分割是指根据灰度.色彩.空间纹理.几何形状等特征把图像划分成若干个互不相交的区域. 最简单的图像分割就是将物体从背景中分割出来 1.图像二值化 cv2.threshold是opencv-python中的图像二值化方法,可以实现简单的分割功能. retval, dst = cv2.threshold(src, thresh

  • jQuery position() 函数详解以及jQuery中position函数的应用

    position()函数用于返回当前匹配元素相对于其被定位的祖辈元素的偏移,也就是相对于被定位的祖辈元素的坐标.该函数只对可见元素有效. 所谓"被定位的元素",就是元素的CSS position属性值为absolute.relative或fixed(只要不是默认的static即可). 该函数返回一个坐标对象,该对象有一个left属性和top属性.属性值均为数字,它们都以像素(px)为单位. 与offset()不同的是:position()返回的是相对于被定位的祖辈元素的坐标,offse

  • 详解Python+opencv裁剪/截取图片的几种方式

    前言 在计算机视觉任务中,如图像分类,图像数据集必不可少.自己采集的图片往往存在很多噪声或无用信息会影响模型训练.因此,需要对图片进行裁剪处理,以防止图片边缘无用信息对模型造成影响.本文介绍几种图片裁剪的方式,供大家参考. 一.手动单张裁剪/截取 selectROI:选择感兴趣区域,边界框框选x,y,w,h selectROI(windowName, img, showCrosshair=None, fromCenter=None): . 参数windowName:选择的区域被显示在的窗口的名字

  • 详解Python OpenCV数字识别案例

    前言 实践是检验真理的唯一标准. 因为觉得一板一眼地学习OpenCV太过枯燥,于是在网上找了一个以项目为导向的教程学习.话不多说,动手做起来. 一.案例介绍 提供信用卡上的数字模板: 要求:识别出信用卡上的数字,并将其直接打印在原图片上.虽然看起来很蠢,但既然可以将数字打印在图片上,说明已经成功识别数字,因此也可以将其转换为数字文本保存.车牌号识别等项目的思路与此案例类似. 示例: 原图 处理后的图 二.步骤 大致分为如下几个步骤: 1.模板读入 2.模板预处理,将模板数字分开,并排序 3.输入

  • 详解python opencv图像混合算术运算

    目录 图片相加 cv2.add() 按位运算 图片相加 cv2.add() 要叠加两张图片,可以用 cv2.add() 函数,相加两幅图片的形状(高度 / 宽度 / 通道数)必须相同.         numpy中可以直接用res = img + img1相加,但这两者的结果并不相同(看下边代码):         add()两个图片进行加和,大于255的使用255计数.         numpy会对结果取256(相当于255+1)的模: import numpy as np import c

随机推荐