OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框)

这篇具有很好参考价值的文章主要介绍了OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

5. 图像基本操作

  • 访问像素值并修改
  • 访问图像属性
  • 设置感兴趣区域(ROI)
  • 分割和合并图像

5.1 访问像素值并修改

访问像素值

import cv2

# 读取图像
# img——>(h, w, c),c为通道数
img = cv2.imread('lena.jpg')

# 访问像素值
px = img[100, 100]
print("像素值:", px)
# img——>(b, g, r)
# 蓝色像素值——>对应通道b
blue = img[100, 100, 0]
print("蓝色像素值:", blue)

OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框),OpenCV学习,opencv,学习,人工智能

修改像素值

img[100, 100] = [255,255,255]
print(img[100,100])

OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框),OpenCV学习,opencv,学习,人工智能
简单访问每个像素值并修改比较缓慢,一般不使用。

Numpy数组方法array.item()array.itemset()被认为更好,但是它们始终返回标量。

更好的像素访问和编辑方法:

# 访问蓝色像素值
print(img.item(100, 100, 0))

# 修改蓝色像素值
img.itemset((100,100,0), 255)

OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框),OpenCV学习,opencv,学习,人工智能

修改B通道像素值为255,区间[200:400, 200:400]

import cv2

# 读取图像
# img——>(h, w, c),c为通道数
img = cv2.imread('lena.jpg')

# 修改B通道像素值为255,区间[200:400, 200:400]
for i in range(200, 400):
    for j in range(200, 400):
        img.itemset((i, j, 0), 255)

# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框),OpenCV学习,opencv,学习,人工智能

5.2 访问图像属性

属性属性包括行数、列数和通道数,图像数据类型,像素数等。

import cv2

# 读取图像
# img——>(h, w, c),c为通道数
img = cv2.imread('lena.jpg')

# 图像形状
print('图像形状', img.shape)
# 像素总数
print('像素总数', img.size)

# 图像数据类型
print('图像数据类型', img.dtype)

OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框),OpenCV学习,opencv,学习,人工智能

5.2 图像感兴趣区域ROI

对于人物图像,我们感兴趣的一般是人脸区域。使用Numpy索引再次获得ROI,并将脸复制到图像中的另一个区域:

import cv2

# 读取图像
img = cv2.imread('lena.jpg')

# 获取脸的区域
face = img[200:400, 200:400]

# 将脸复制到另一区域
img[200:400, 0:200] = face

# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框),OpenCV学习,opencv,学习,人工智能

5.3 拆分和合并图像通道

将图像的通道进行分离,并分开展示。同时实现OpenCV在一个窗口显示多张图像。

import cv2
import numpy as np

# 读取图像
img = cv2.imread('lena.jpg')

# 分离通道
b, g, r = cv2.split(img)

# 合并通道
img_m = cv2.merge((b, g, r))

# 改变各通道图像的尺寸
b = cv2.resize(b, (200, 200))
g = cv2.resize(g, (200, 200))
r = cv2.resize(r, (200, 200))
img = cv2.resize(img, (200, 200))


# 将单通道图像转换为3通道
b = cv2.cvtColor(b, cv2.COLOR_GRAY2RGB)
g = cv2.cvtColor(g, cv2.COLOR_GRAY2RGB)
r = cv2.cvtColor(r, cv2.COLOR_GRAY2RGB)

# 同一窗口显示多张图像
# 拼接需要图像的形状及通道一样
hmerge = np.hstack((b, g, r, img)) # 水平拼接
vmerge = np.vstack((b, g, r)) # 垂直拼接

# 显示图像
cv2.imshow('image', hmerge)
cv2.waitKey(0)
cv2.destroyAllWindows()

OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框),OpenCV学习,opencv,学习,人工智能

5.4 为图像设置边框(填充)

cv2.copyMakeBorder(src, top, bottom, left, right, borderType, dst=None, value=None)函数在卷积运算,零填充等方面有很多应用。

  • src:输入图像

  • top,bottom,left,right:边界宽度(以相应方向上的像素数为单位)

  • borderType:定义要添加哪种边框的标志,可以是以下类型

    • cv2.BORDER_CONSTANT :添加恒定的彩色边框
    • cv2.BORDER_REFLECT : 边框将是边框元素的镜像
    • cv2.BORDER_REPLICATE:最后一个元素被复制
    • cv2.BORDER_WRAP:包裹
  • dst:目标图像

  • value:边框的颜色

import cv2
import numpy as np

# 读取图像
img = cv2.imread('lena.jpg')
img = cv2.resize(img, (200, 200))

# 设置边框
constant = cv2.copyMakeBorder(img, 10, 10, 10, 10, cv2.BORDER_CONSTANT)
reflect = cv2.copyMakeBorder(img, 10, 10, 10, 10, cv2.BORDER_REFLECT)
replicate = cv2.copyMakeBorder(img, 10, 10, 10, 10, cv2.BORDER_REPLICATE)
wrap = cv2.copyMakeBorder(img, 10, 10, 10, 10, cv2.BORDER_WRAP)

# 图像拼接,水平
hmerge = np.hstack((constant, reflect, replicate, wrap)) # 水平拼接


# 显示图像
cv2.imshow('image', hmerge)
cv2.waitKey(0)
cv2.destroyAllWindows()

OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框),OpenCV学习,opencv,学习,人工智能文章来源地址https://www.toymoban.com/news/detail-737184.html

到了这里,关于OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV基本操作——图像的基础操作

    注:opencv图像坐标系中,左上角是原点,y轴向下,x轴向右,单位像素点 有时需要在B,G,R通道图像上单独工作。在这种情况下,需要将BGR图像分割成单个通道。或者在其他情况下,可能需要将这些单独的通道合并到BGR图像 opencv中有150多种颜色空间转换方法。最广泛使用的转

    2024年02月13日
    浏览(96)
  • 【笔记】OpenCV图像基本操作

    目录 一、图像属性 1.1图像格式 1.2图像尺寸 1.3图像分辨率和通道 1.4图像直方图 1.5图像颜色空间 二、基本操作 2.1 图像读取 cv2.imread() 2.2 图像的显示 cv2.imshow() 2.3 图像的保存 cv2.imwrite() 2.4 用matplotlib显示图像 plt.imshow() 2.5 视频读取 cv2.VideoCapture() 2.6 图像截取、颜色通道提取

    2024年02月03日
    浏览(504)
  • Opencv+Python图像基本操作

    目录 图像的读取、显示和保存 获取图像属性  图像截取  绘图功能 画线 画矩形 画圆圈 画椭圆          画多边形 向图像添加文本 cv2.imread() ,  cv2.imshow() ,  cv2.imwrite()分别表示读取图片,显示图片,写入图片   retval = cv2.imread(文件名 [,显示控制参数]) cv2.IMREAD_UNCHANGED:不改

    2024年02月04日
    浏览(54)
  • C# 使用OpenCV基本图像操作功能

    OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。C#在上位机开发中比较常用,有些项目需要在上位机上加入一些机器视觉相关的功能,在下面简单介绍了C#中使用OpenCV库的方法。 在管理NuGet包中,搜索OpenCvSharp4,安装

    2024年02月15日
    浏览(66)
  • Python Opencv实践 - 基本图像IO操作

       

    2024年02月14日
    浏览(61)
  • OpenCV基本图像处理操作(十)——图像特征harris角点

    角点 角点是图像中的一个特征点,指的是两条边缘交叉的点,这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中,角点是重要的特征,因为它们通常是图像中信息丰富的区域,可以用于图像分析、对象识别、3D建模等多种应用。 角点的识别可以帮助在进

    2024年04月23日
    浏览(64)
  • opencv 图像和视频处理的基本操作(python)

    原图:   1 图片的获取 主要通过cv2.imread(src)函数进行获取 2 图片的显示 3 ROI区域(图片截取) 4 图片的RGB通道划分 注意cv2.imread()获取的图片通过顺序为BGR,而非RGB,即B为0,G为1,R为2  保留R通道  保留G通道   保留B通道   5 RGB通道合成   6 边界填充 主要是通过cv2.copyMakeBo

    2023年04月21日
    浏览(67)
  • 【OpenCV实现鼠标绘图,轨迹栏做调色板,图像的基本操作】

    在OpenCV中操作鼠标事件 函数:cv.setMouseCallback() 目的是在鼠标双击的地方画一个圆。首先,我们需要创建一个鼠标回调函数,该函数会在鼠标事件发生时执行。鼠标事件包括左键按下、左键松开、左键双击等等。通过获取每个鼠标事件的坐标(x, y),我们就能实现画圆的功能。

    2024年02月05日
    浏览(64)
  • Opencv 基本操作八 不均匀光照下的图像二值化探讨

    在进行图像二值化时总是存在一些明部、暗部的干扰,单一的使用opencv提供的原始二值化方法很难做到预期效果。一般我们都会采用分块二值化(将图像切为多个局部进行二值化)、对比度提升(对值域进行线性或者非线性变换、直方图均衡化)、局部二值化(Bernsen 算法、

    2024年02月16日
    浏览(208)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包