opencv获取图片像素坐标_【OpenCV+Python】图像的基本操作与算术运算

图像的基本操作

在上个教程中,我们介绍了使用鼠标画笔的功能。本次教程,我们将要谈及OpenCV图像处理的基本操作。

本次教程的所有操作基本上都和Numpy相关,而不是与OpenCV相关。要使用OpenCV编写更好的优化代码,需要Numpy的丰富知识。

1.查看和修改像素值

我们要想查看一幅图像中某一个像素点的像素值,首先需要进行定位,将其坐标标定,我们先来看一个彩色图像(仍然是我们的猫咪,本次教程它是我们的主角):

d0a58deff749fcaec509c55f475f09cb.png

现在我想查看某一个坐标的像素值,我们在pycharm中输入代码:

import cv2import numpy as npimg = cv2.imread("cat.jpg")#获取像素值px = img[200,200]print(px)

代码为查看图像坐标(200,200)处的像素值,我们来看结果:

c31f3cbe882cc31e2d62ea848b8d6de7.png

在之前的教程中我们谈到,OpenCV对于图像的读取并非是RGB通道,而是BGR通道,那么程序输出的[178,189,186]则分别对应于BGR的像素,我们可以进行验证:

import cv2import numpy as npimg = cv2.imread("cat.jpg")#获取像素值px = img[200,200]B = img[200,200,0]G = img[200,200,1]R = img[200,200,2]print(px,B,G,R)

1f9119fef867fcb94568ed11b196d3b8.png

现在我们假设,如果图像并非彩色,而是黑白的灰度图像,那么将会怎么输出?先进行实验:

443a0aa272c54d8b91f7572331bd2b9f.png

我们仍然用刚刚的代码进行实验(前提是图像已经灰度化处理,这在后面会讲到),效果:

36455a7c411d02e630924c98f5569d44.png

可以看到,BGR的像素一致,我们得出一个结论:对于灰度图像,其输出的像素值本质上为它的亮度强度值,值的范围为0-255之间,当为0时,则全部为黑色,相反则为白色。

接下来我们来修改像素值,将指定坐标的像素值用一个数组进行赋值:

import cv2import numpy as npimg = cv2.imread("cat1.jpg")#获取像素值px = img[200,200]print(px)img[200,200] = [225,225,225]print(img[200,200])

查看输出:

834f65abef8d834bcf6633fa7755337a.png

可以看到,初始像素值跟修改之后的像素值。

一般来说,数组通常选择的是某一片区域,比如头几行或者最后几列。而对于某个像素点的访问,Numpy数组方法,array.item() 和array.itemset()有着更好的作用。但是它返回的是一个标量。所以如果我们想访问所有的B,G,R值,就需要分开调用array.item(),我们来看代码(仍然以坐标200,200为例):

import cv2import numpy as npimg = cv2.imread("cat.jpg")#获取像素值px = img[200,200]print(px)print(img.item(200,200,0))

我们用item输出像素的B值,也就是蓝色像素的数值:

f7c67d9aa0b57e1c6b4d91a3f6695ef0.png

实验可以看到,跟之前的效果是一样的。

对于指定坐标的赋值,我们使用itemset函数可以精确到某个像素,比如现在我只对蓝色像素的数值进行改变:

import cv2import numpy as npimg = cv2.imread("cat.jpg")#获取像素值px = img[200,200]print(px)print(img.item(200,200,0))img.itemset((200,200,0),100)print(img.item(200,200,0))

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值