【openCV-python系列学习】二、openCV像素处理以及numpy像素处理

一、openCV像素处理

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区域

  • ROI(Region of Interest)表示感兴趣区域。它是指从被处理图像以方框、圆形、椭圆、不规则多边形等方式勾勒出需要处理的区域。可以通过各种算子(Operator)和函数求得感兴趣ROI区域,并进行图像的下一步处理,被广泛应用于热点地图、人脸识别、图像分割等领域。
  • 通过像素矩阵可以直接获取ROI区域,如img[200:400, 200:400]。
    代码如下:
# -*- 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()

在这里插入图片描述
也可以将提取的ROI图像进行融合实验,代码如下:

# -*- 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()

结果:
在这里插入图片描述

二、numpy像素操作

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库读取与修改像素
谢谢大神分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值