Python-OpenCV对图像像素的遍历操作示例

如果您想了解OpenCV-C++是如何遍历图像像图的,那么可以参看下面这个页面:
https://www.hhai.cc/thread-110-1-1.html

Python-OpenCV以Numpy库的中ndarray对象存储图像数据,所以在Python-OpenCV中对图像的遍历就是对ndarray对象的遍历。

要想较为熟练地对ndarray对象数据进行遍历、选取等操作,需要有以下基础知识:
01-numpy库ndarray对象的切片操作(三帽号规则)
02-对Numpy库ndarray对象(矩阵)中数据元素的访问、选取操作

目录

  • 01-对二维灰度图像的遍历操作
  • 02-对三通道图像的遍历操作

01-对二维灰度图像的遍历操作

第一种方法:用for循环操作遍历每一个像素,然后对像素值进行操作
示例代码如下:
代码中用到的图像下载链接:https://pan.baidu.com/s/1SPxGouOli-XbBYfr-IJ9nw?pwd=dwch

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术
# OpenCV的版本为4.4.0import cv2 as cvimage_gray = cv.imread('F:/material/images/2022/2022-06/ring.bmp', 0)cv.imshow('image_gray', image_gray)img_row = image_gray.shape[0]
img_col = image_gray.shape[1]# 利用遍历操作对二维灰度图作取反操作
for i in range(img_row):for j in range(img_col):temp1 = image_gray[i, j]image_gray[i, j] = 255-temp1cv.imshow('image_gray_reverse', image_gray)cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下图所示:

第二种:利用ndarray的减号运算符一句话实现:
关于ndarray的矩阵运算,大家可以参考下面这篇博文:
Python_Numpy库中各种矩阵基本运算(加、减、乘、点乘、点除、乘方、转置等)
示例代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术
# OpenCV的版本为4.4.0import cv2 as cvimage_gray = cv.imread('F:/material/images/2022/2022-06/ring.bmp', 0)cv.imshow('image_gray', image_gray)image_gray = 255 - image_graycv.imshow('image_gray_reverse', image_gray)cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下:

02-对三通道图像的遍历操作

对下面这幅图像进行像素遍历操作:

图像中的三个圆分别为纯红圆、纯绿圆和纯蓝圆。
上面这幅图像百度网盘下载链接:https://pan.baidu.com/s/1pQS7P6EWYqGMMRX_2lx1cw?pwd=1rrs

首先我们看下上面这幅图在ndarray中的存储结构:

从上面的存储结构可以看出,第一个维度为图像的行数,第二个维度为图像的列数,第三个维度为图像的通道数。
知道上面这个存储结构后,我们才能更有的放矢的进行操作。

现在要把上面这幅图像中的红色圆去掉,该怎么实现呢?
有以下两种方法。

第一种方法:通过循环操作遍历每一个像素的R通道,将其值置为0实现。
代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术
# OpenCV的版本为4.4.0import cv2 as cvimage = cv.imread('F:/material/images/2022/2022-06/BGR_circle.bmp')cv.imshow('image', image)img_row = image.shape[0]
img_col = image.shape[1]# 利用遍历像素操作将红色通道的值全部置为0
for i in range(img_row):for j in range(img_col):image[i, j, 2] = 0cv.imshow('image_none_R', image)cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下图所示:

第二种方法:用切片操作将红色通道全部置为0(一句代码搞定)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术
# OpenCV的版本为4.4.0import cv2 as cvimage = cv.imread('F:/material/images/2022/2022-06/BGR_circle.bmp')cv.imshow('image', image)image[:, :, 2] = 0  # 这句话将红色通道的灰度值全部置为0cv.imshow('image_none_R', image)cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下:

通过上面两种方法我们得出重要结论,在对图像矩阵的某类元素进行操作时,首选应该是矩阵运算或者矩阵的切片操作。这两种操作实在搞不定时再考虑通过循环遍历的方法实现。

Python-OpenCV对图像像素的遍历操作示例相关推荐

  1. python图像增强_Python图像的增强处理操作示例【基于ImageEnhance类】

    本文实例讲述了Python图像的增强处理操作.分享给大家供大家参考,具体如下: python中PIL模块中有一个叫做ImageEnhance的类,该类专门用于图像的增强处理,不仅可以增强(或减弱)图像 ...

  2. python opencv读取图像像素值_python-opencv--图像像素通道读取及修改

    data/dtype/size/shape/len ''' import cv2 as cv import numpy as np def access_pixes(image): print(ima ...

  3. OpenCV计算机视觉编程之三种图像像素的遍历方法

    为了构建计算机视觉应用程序,需要学会访问图像内容,有时也要修改或创建图像,如何操作图像的像素,就需要遍历一幅图像并处理每一个像素.现在我们就来介绍OpenCV三种图像像素的遍历方法: 一. 用cv:: ...

  4. Python OpenCV 之图像乘除与像素的逻辑运算,图像处理取经之旅第 17 天

    今天的学习的内容是:通过 Python OpenCV 对图像实现乘除操作,涉及函数为 cv2.multiply 与 cv2.divide.后面又补充了一些像素的逻辑运算,以及一个综合案例 cv2.mu ...

  5. Python+OpenCV判断图像是黑底还是白底

    前言 本篇博客使用Python+OpenCV判断图像是黑底还是白底,利用图像对角线上的黑白像素点个数进行判断,详情见下文. 本篇博客内容包含代码逻辑.说明.依赖.实现,这几部分.代码实现部分包含2种实 ...

  6. 【Python OpenCV】图像直方图 calcHist方法 equalizeHist方法

    [Python OpenCV]图像直方图 calcHist方法 equalizeHist方法 (一)图像直方图 图像的构成是有像素点构成的,每个像素点的值代表着该点的颜色(灰度图或者彩色图).所谓直方 ...

  7. Python+OpenCV:图像Harris角点检测(Harris Corner Detection)

    Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...

  8. Python+OpenCV:图像金字塔

    Python+OpenCV:图像金字塔 理论 通常情况下,我们使用固定大小的图像.但在某些情况下,我们需要处理(相同的)不同分辨率的图像. 例如,当搜索图像中的某些东西时,比如脸,我们不确定该物体在图 ...

  9. python索引例子_Python实现带下标索引的遍历操作示例

    本文实例讲述了Python实现带下标索引的遍历操作.分享给大家供大家参考,具体如下: 代码如下: #coding=utf-8 #python - 实现带下标索引的遍历. str = 'abcdefgh ...

最新文章

  1. 玩转python轻松过二级_关于通话的阿里云论坛用户知识和技术交流
  2. Hibernate:hbm2ddl.auto =在生产中更新?
  3. ckeditor 图片上传_关于上传中国鸟类图库和哺乳动物图库物种数量及称号的最新规定...
  4. linux dhcp解释,教会你Suse Linux DHCP服务器配置详解
  5. SGU 248. Integer Linear Programming( 背包dp )
  6. 中断linux命令快捷键_实用!快速操作Linux终端命令行的快捷键
  7. 如何限制用户在某一时间段多次访问接口
  8. matlab 省略号,matlab知识集锦 | 学步园
  9. bzoj 3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵
  10. [LeetCode系列] 跳跃问题II
  11. 北大助理教授献给「后浪」的建议:奔涌吧,深度学习!
  12. IAR软件的使用讲解
  13. C++实现简易五子棋游戏
  14. 计算机知识查找,计算机基础知识:如何查找文件
  15. 怎么把视频和图片拼在一起?朋友圈会动的拼图视频,快速制作技巧
  16. “夜拍王”荣耀10GT上线,不用三脚架也能出夜景大片!
  17. SSD固态硬盘坏了,还能修好吗?
  18. 手机网站(wap)广告展示一般都有哪些表现形式?
  19. 【基础知识】BSS段,数据段,代码段,堆栈段
  20. 多久变形金刚2拍摄电影

热门文章

  1. asp.net 常用功能
  2. 力扣一日一练(5)——最长公共前缀
  3. 如何获取不同年份的poi_抖音营销案例爆红抖音,万人争领,屈臣氏“魔盒”如何联动线上线下?...
  4. 课堂笔记学习java(初级)
  5. c语言if语句习题,大学c语言if switch for 语句实验四练习题
  6. 传奇人物《周兴和》书连载19 困境中灵光突现
  7. Tensorflow的MNIST进阶教程CNN网络参数理解
  8. 字段包括id、mmsi、longitude、latitude的csv导入pgadmin4并使用postgis去分析的具体步骤...
  9. 如何恢复交换机出厂值
  10. Optional 类