网站菜单

OpenCV学习笔记(1)——图像处理基础

一:图像读取与显示

1.读取图像

#img = cv2.imread(文件名, [显示控制参数,可选])
img = cv2.imread(“demo.jpg”)

显示控制参数:

cv.IMREAD_UNCHANGED

cv.IMREAD_GRAYSCALE

cv.IMREAD_COLOR

2.显示图像

#window = cv2.imshow(窗口名,图像名)
cv2.imshow("demo",img)

3.持续时间

#retval = cv2.waitKey([delay])
cv2.waitKey(0)

delay < 0 等待键盘单击

delay > 0 等待delay的毫秒

delay = 0 无限等待

4.保存图像

#retval = cv2.imwrite(文件地址,文件名)
cv2.imwrite("./demo2.jpg", img)

5.关闭窗口释放内存

cv2.destroyAllWindows()

二:像素处理

1.读取像素

OpenCV

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

#灰度图像,返回灰度值
p = img[88, 142]
print(p)

#RGB图像,返回RGB值
blue = img[78, 125, 0]
print(blue)
green = img[78, 125, 1]
print(green)
red = img[78, 125, 2]
print(red)
p = img[78, 125]
print(p) #将返回三个值,B G R

Numpy

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

#灰度图像,返回灰度值
p = img.item(88, 142)
print(p)

#RGB图像,返回RGB值
blue = img.item(78, 125, 0)
print(blue)
green = img.item(78, 125, 1)
print(green)
red = img.item(78, 125, 2)
print(red)
p = img.item(78, 125)
print(p) #将返回三个值,B G R

2.修改像素

OpenCV

#像素 = 新值

#灰度图像
img[88, 99] = 255

#BGR图像
img[88, 99, 0] = 255
img[88, 99, 1] = 255
img[88, 99, 2] = 255
#或者
img[88, 99] = [255, 255, 255]

#大范围修改,100-150行,100-150列
img[100: 150, 100: 150] = [255, 255, 255]

Numpy

#图像名.itemset(位置,新值)

#灰度图像
img.itemset((88, 99), 255)

#BGR图像
img.itemset((88, 99, 0), 255)
img.itemset((88, 99, 1), 255)
img.itemset((88, 99, 2), 255)

3.获取图像属性

#调用shape函数,假设图像为512*512的RGB图像
import cv2

img = cv2.imread("demo.jpg")
print(img.shape) 
##输出(512,512,3)

#调用size函数获取图像像素数目
print(img.size)
##输出786432(行*列*通道数)

#调用dtype函数,返回图像的数据类型(每一个像素点的数据类型)
print(img.dtype)
##输出uint8

三:感兴趣区域ROI

import cv2
import numpy as np

img = cv2.imread("demo.jpg")
face = np.ones((101,101,3)) #使用numpy创建一个101行101列的RGB图像,默认为1
cv2.imshow("demo", img)
face = img[220:400, 250:350] #截取img中的一部分
img[0:180, 0:100] = face #将截取出来的face放在了原图的左上角,操作时注意size
cv2.imshow("demo", img)
cv2.waitKey()
cv2.destroyAllWindows()

四:通道拆分与合并

#BGR图像的拆分
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
#或者
b, g, r = cv2.split(img)
#或者
b = cv2.split(img)[0]

#BGR通道的合并
newImage = cv2.merge([b, g, r]) #注意顺序

#根据img创建一个全0通道,为b
rows, cols, chn = img.shape
b = np.zeros((rows, cols), dtype = img.dtype)

显示评论 (0)

文章评论

相关推荐

Yolov5_Seg输出解析

通过矩阵乘法(在代码中称为“matmul”)来计算分割掩码的原因,主要与实例分割网络(例如 YOLOv5 Segmentation)的实现方式有关。这种方法实际上是一种高效的特征图与目标分割系数组合的…

Ubuntu交叉编译Python

在 Ubuntu 上交叉编译 Python 的流程通常用于为不同平台生成可执行文件(如 ARM、MIPS 等)。以下是一般的操作步骤: 1. 安装必要的依赖工具 首先,确保已经安装了编译所需的工具和依…