普通操作

1. 读取像素

读取像素可以通过行坐标和列坐标来进行访问,灰度图像直接返回灰度值,彩色图像则返回B、G、R三个分量。

需要注意的是, OpenCV 读取图像是 BGR 存储显示。

灰度图片读取操作:

import cv2 as cv

# 灰度图像读取gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)print(gray_img[20, 30])

# 显示图片cv.imshow("gray_img", gray_img)

# 等待输入cv.waitKey()cv.destroyAllWindows()

对于读取灰度图像的像素值,只会返回相应的灰度。

彩色图像读取操作:

import cv2 as cv

# 彩色图像读取color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)

print(color_img[20, 30])

blue = color_img[20, 30, 0]print(blue)

green = color_img[20, 30, 1]print(green)

red = color_img[20, 30, 2]print(red)

# 显示图片cv.imshow("color_img", color_img)

# 等待输入cv.waitKey()cv.destroyAllWindows()

# 打印结果[  3   2 236]32236

需要注意的是在获取彩色图片像素时的第二个参数 1|2|3 的含义是获取 BGR 三个通道的像素。

2. 修改像素

修改像素时,直接对像素赋值新像素即可。

如果是灰度图片,直接赋值即可。

如果是彩色图片,则需依次给 BGR 三个通道的像素赋值。

import cv2 as cv

# 灰度图像读取gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)print(gray_img[20, 30])# 像素赋值gray_img[20, 30] = 255print(gray_img[20, 30])

# 打印结果72255

# 彩色图像读取color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)print(color_img[20, 30])# 像素依次赋值color_img[20, 30, 0] = 255color_img[20, 30, 1] = 255color_img[20, 30, 2] = 255print(color_img[20, 30])

# 打印结果[  3   2 236][255 255 255]

如果觉得依次对 BGR 三个通道赋值有些麻烦的话,也可以通过数组直接对像素点一次赋值:

# 像素一次赋值color_img[20, 30] = [0, 0, 0]print(color_img[20, 30])

# 打印结果[0 0 0]

下面是对一个区域的像素进行赋值,将这个区域的像素全都赋值成为白色:

import cv2 as cv

color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)color_img[50:100, 50:100] = [255, 255, 255]

cv.imshow("color_img", color_img)cv.waitKey()cv.destroyAllWindows()

使用 Numpy 操作

1. 读取像素

使用 Numpy 进行像素读取,调用方式如下:

返回值 = 图像.item(位置参数)

读取灰度图像和彩色图像如下:

import cv2 as cv

# 读取灰度图像gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)print(gray_img.item(20, 30))

# 打印结果72

# 读取彩色图像color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)

blue = color_img.item(20, 30, 0)print(blue)

green = color_img.item(20, 30, 1)print(green)

red = color_img.item(20, 30, 2)print(red)

# 打印结果32236

2. 修改像素

修改像素需要使用到 Numpy 的 itemset() 方法,调用方式如下:

图像.itemset(位置, 新值)

下面是我将 [20, 30] 这个修改为白色的示例:

import cv2 as cv

# 读取彩色图像color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)

print(color_img[20, 30])

color_img.itemset((20, 30, 0), 255)color_img.itemset((20, 30, 1), 255)color_img.itemset((20, 30, 2), 255)

print(color_img[20, 30])

# 输出结果[  3   2 236][255 255 255]

注意:普通操作通常用于选择数组的区域,例如上面的示例中的选择了 [50:100, 50:100] 这么一个正方形。对于单个像素访问, Numpy 数组方法 array.item() 和 array.itemset() 被认为更好。

Matplotlib 显示图像

我们可以通过 OpenCV 读入图像,然后使用 Matplotlib 来进行图像显示。

import cv2 as cvfrom matplotlib import pyplot as plt

img=cv.imread('maliao.jpg', cv.IMREAD_COLOR)plt.imshow(img)plt.show()

如果我们直接使用 Matplotlib 来显示 OpenCV 读入的图像,会得到下面这个蓝色的马里奥:

这是因为对于 OpenCV 的像素是 BGR 顺序,然而 Matplotlib 所遵循的是 RGB 顺序。

解决的方案有很多种(循环像素点的不算哈,这个太傻了),如下:

import cv2 as cvfrom matplotlib import pyplot as plt

img=cv.imread('maliao.jpg',cv.IMREAD_COLOR)

# method1b,g,r=cv.split(img)img2=cv.merge([r,g,b])plt.imshow(img2)plt.show()

# method2img3=img[:,:,::-1]plt.imshow(img3)plt.show()

# method3img4=cv.cvtColor(img, cv.COLOR_BGR2RGB)plt.imshow(img4)plt.show()

结果我就不贴了,这三种方法都可以完成 BGR 至 RGB 的转换。

示例代码

如果有需要获取源码的同学可以在公众号回复「OpenCV」进行获取。

参考

https://blog.csdn.net/eastmount/article/details/82120114

http://woshicver.com/

感谢阅读

图像像素点赋值_Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像...相关推荐

  1. 图像像素点赋值_医学图像处理教程(五)——医学图像边缘检测算法

    今天将给大家分享医学图像常见两种图像边缘检测算法. 1.Sobel算子操作 Sobel算子的思想,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同 ...

  2. opencv python3 找图片色块_Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理...

    前文传送门: 图像属性 图像属性包括行数,列数和通道数,图像数据类型,像素数等. 1. 形状:shape 图像的形状可以通过 shape 关键字进行获取,使用 shape 关键的后,获取的信息包括行数 ...

  3. python图像几何变换_Python 图像处理 OpenCV (5):图像的几何变换

    前文传送门: 图像缩放 图像缩放只是调整图像的大小,为此, OpenCV 为我们提供了一个函数 cv.resize() ,原函数如下: resize(src, dsize, dst=None, fx= ...

  4. python获取图片像素点颜色_Python获取图片位置像素色值及判断色值是否存在

    本文背景: 公司项目的广告系统有个功能,给图片模板打指定的颜色值点,根据需要拼合的图片数量,打点数量也不同.设计说他弄好了,运营上传打点后的模板图片时,获取不到打点的位置坐标.于是找研发看是怎么回事, ...

  5. Python 图像 一样大小_Python图像处理,顺便生成一张海报

    海报是什么? 海报,是一种常见的宣传形式.通常包括活动的性质.主办单位.时间.地点等内容,多用于影视剧或新品宣传中,利用图片.文字.色彩.空间等要素进行完整的结合,以恰当的形式向人们展示出宣传信息. ...

  6. python图像腐蚀处理_Python图像处理之膨胀与腐蚀的操作

    引言 膨胀与腐蚀是图像处理中两种最基本的形态学操作,膨胀将目标点融合到背景中,向外部扩展,腐蚀与膨胀意义相反,消除连通的边界,使边界向内收缩.在本文中我们将了解使用内核的图像膨胀与腐蚀的基本原理. 让 ...

  7. 利用python对图像进行傅里叶变换_python用opencv 图像傅里叶变换

    傅里叶变换 dft = cv.dft(np.float32(img),flags = cv.DFT_COMPLEX_OUTPUT) 傅里叶逆变换 img_back = cv.idft(f_ishift ...

  8. 如何在cv2窗口图像上写字_Python for opencv 之 显示图像及在图像上书写文字

    #从Opencv中导入函数 import cv2.cv as cv #创建一个窗口,命名为you need tostruggle, #cv.CV_WINDOW_AUTOSIZE这个参数设定显示窗口虽图 ...

  9. opencv图像清晰度计算_Python中的十大图像处理工具

    编译:张秋玥.小七.蒋宝尚 本文主要介绍了一些简单易懂最常用的Python图像处理库 当今世界充满了各种数据,而图像是其中高的重要组成部分.然而,若想其有所应用,我们需要对这些图像进行处理.图像处理是 ...

最新文章

  1. 使用Pycharm给Python程序传递参数
  2. oracle 分页写法
  3. 《深入理解Elasticsearch(原书第2版)》——第2章 查询DSL进阶 2.1 Apache Lucene默认评分公式解释...
  4. Ubuntu伪分布式hadoop安装
  5. 091_类数组对象转为数组
  6. 人行联网核查更新_又一批新职业公布,学互联网技术,等于站在就业“风口”...
  7. 【模拟】Codeforces 705A Hulk
  8. 关于MySQL 8.0
  9. asp.net HttpHand和HttpModule的详细解释,包括Asp.Net对Http请求的处理流程。
  10. pyinotify结合ftplib自动上传新建的文件
  11. editplus 快捷键
  12. 微服务之旅的经验分享
  13. markdown常用字体
  14. 反转一个英语句子c++
  15. c++获取umg ue_UE4中UMG与C++交互 页面文本修改
  16. Performance Monitor2:性能计数器
  17. 通达信手机版分时图指标大全_通达信精选指标——操盘手主图优化版
  18. 无线系列 - MIMO波束赋形技术研究
  19. excel转word_PDF一键转Word、转Excel、转PPT、转Html、转图片软件
  20. PAT考试乙级1024(C语言实现)重点题目

热门文章

  1. MMC无法创建管理单元
  2. 区别 (function($){...})(jQuery)、$(function(){ })和$.fn
  3. iOS UIlabel文字排版(改变字间距行间距)分类
  4. Swift傻傻分不清楚系列(二)数据类型
  5. UVa202Repeating Decimals (循环小数)
  6. Django ajax 检测用户名是否已被注册
  7. MongoDB升级导致启动失败
  8. iOS GoldRaccoon第三方FTP文件夹下载失败原因
  9. 制作404页面的重要性
  10. HTTP响应报文与工作原理详解