1.读取像素
灰度图像直接返回灰度值,彩色图像则返回B、G、R三个分量。注意OpenCV读取图像是BGR存储显示,需要转换为RGB再进行图像处理。
#灰度图像:返回值 = 图像(位置参数),返回值只有一个数
test=img[88,42]
#彩色图像:返回值 = 图像[位置元素, 0 | 1 | 2 ] 获取BGR三个通道像素,返回值[blue green red]
blue=img[88,142,0]
green=img[88,142,1]
red=img[88,142,2]
2. 修改图像
修改图像如果是灰度图像则直接赋值新像素即可,彩色图像依次给三个值赋值即可
灰度图像:
img[88,142] = 255
彩色图像:方法一:
img[88,142, 0] = 255
img[88,142, 1] = 255
img[88,142, 2] = 255
彩色图像:方法二
img[88,142] = [255, 255, 255]
总体看一下代码:
import cv2
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")
#创建窗口
cv2.namedWindow("Image",2)
#在窗口显示图像
cv2.imshow("Image", img)
#不加下一句的话。在命令行中执行的话,则是一闪而过
cv2.waitKey (0)
#提取像素
test=img[66,88]
print(test)
#直接赋值
img[66,88]=[255,255,255]
print(test)
#输出:
#[201 238 246]
#[255 255 255]
3.通过像素矩阵可以直接获取ROI区域
# -*- coding:utf-8 -*-
import cv2
import numpy as np
#读取图像
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")
#显示原始图像
cv2.imshow("Demo", img)
#显示ROI区域
zone = img[100:600, 50:600]
cv2.imshow("zone", zone)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
# -*- coding:utf-8 -*-
import cv2
import numpy as np
#读取图像
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")
#显示ROI区域
zone = img[100:450, 250:500]
img[0:350,0:250] = zone
cv2.imshow("zone", img)
#融合区域大小要一致,否则会报错
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
1.使用Numpy进行像素读取
调用方式如下:
返回值 = 图像.item(位置参数)
import cv2
import numpy
#读取图像
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")
#读取像素
blue = img.item(78, 100, 0)
green = img.item(78, 100, 1)
red = img.item(78, 100, 2)
print(blue)
print(green)
print(red)
输出是:
201
238
246
2.对像素进行修改
使用Numpy的itemset函数修改像素,调用方式如下:
图像.itemset(位置, 新值)
import cv2
import numpy
#读取图像
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")
#修改像素
print(img.item(78, 100, 0))
print(img.item(78, 100, 1))
print(img.item(78, 100, 2))
img.itemset((78, 100, 0), 100)
img.itemset((78, 100, 1), 100)
img.itemset((78, 100, 2), 100)
print(img.item(78, 100, 0))
print(img.item(78, 100, 1))
print(img.item(78, 100, 2))
输出结果是:
201
238
246
100
100
100
或者:
#B、G、R一起修改:
print(img[78, 78])
img.itemset((78, 78, 0), 0)
img.itemset((78, 78, 1), 0)
img.itemset((78, 78, 2), 0)
print(img[78, 78])
输出为:
[202 239 247]
[0 0 0]
openCV-python学习第二课,主要学习来源
[Python图像处理] 二.OpenCV+Numpy库读取与修改像素
谢谢大神分享!