openCV+Python 数字图像处理(1)——图像基本操作(读入显示保存、属性读取、均值标准差、取反、色彩空间转换、提取颜色、通道分离与合并)

包括图像的读入、显示、保存,获取图片大小、通道数等属性,求取图像均值、标准差,遍历图像各个像素,图像取反,图像色彩空间转换,提取某种颜色,通道分离与合并等

1.基本操作

  • (1)读入图像
# 默认的读入格式是BGR
img1 = cv2.imread('E:/PycharmProjects/one.jpg')
  • (2)显示图像
cv2.imshow(‘winname’, img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow(winname, mat) 有窗口名和图片两个参数,不要忘记第一个参数
cv2.waitKey(delay: Any = None) 等待键盘输入。参数为延迟时间,单位为ms。参数为0时表示一直等到有键盘任意输入再进行下一操作。

  • (3)保存图像
cv2.imwrite('E:/PycharmProjects/one.png', img1)

cv2.imwrite(filename, img) 有文件名和图片两个参数,通过设定文件名的后缀可以转换图片格式

  • (4)获取图片属性
def img_info(img):
    print('type:', type(img))
    print('img.size:', img.size)
    print('img.dtype:', img.dtype)
    print('img.shape', img.shape)
img_info(img1)

type( ): 获取对象类型,图像类型为numpy.ndarray
.shape: h, w, c 高度、宽度、通道数,最常用
.size: 图像像素总数
.dtype: 数据类型,默认为uint8

  • (5)图像求均值、标准差
mean_img = cv2.mean(img)
m, stddev = cv2.meanStdDev(img)

图像有三个通道时,结果为三个通道分别求均值和标准差

  • (6)遍历图像各个像素且取反
import cv2
import numpy as np
img1 = cv2.imread('E:/PycharmProjects/one.jpg')
def reverse_img(img):
    h, w, c = img.shape
    r_img = np.ones([h, w, c], dtype=np.uint8)#要注意dtype为np.uint8,否则图像无法正常显示
    print(r_img.dtype)
    print(r_img)
    print(r_img.shape)
    for row in range(h):
        for col in range(w):
            for ch in range(c):
                r_img[row, col, ch] = 255-img[row, col, ch]
    print(r_img.dtype)
    show('reverse_img', r_img)

reverse_img(img1)
  • (7)图像取反
ot_img1 = cv2.bitwise_not(img1)
  • (8)图像色彩空间转换
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

HSV(Hue, Saturation, Value)色彩空间,H(色调),S(饱和度),V(明度)

  • (9)提取图像中某种颜色
low = np.array([0, 0, 0])
up = np.array([255, 100, 100])
blue_img1 = cv2.inRange(img1, low, up)
cv2.inRange(src: Any, lowerb: Any, upperb: Any, dst: Any = None)

lowerb, upperb: numpy.ndarray类型

HSV基本颜色分量范围:HSV基本颜色分量范围

  • (10)通道分离与合并
b, g, r = cv2.split(img)
merge_img = cv2.merge([b, g, r])

2.代码示例

import cv2
import numpy as np

# 1.读入图片和保存图片
img1 = cv2.imread('E:/PycharmProjects/one.jpg')

# 2.显示图片
def show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
show('img1', img1)

# 3.保存图像
cv2.imwrite('E:/PycharmProjects/one.png', img1)

# 4.获取图片属性
def img_info(img):
    print('type:', type(img))
    print('img.size:', img.size)
    print('img.dtype:', img.dtype)
    print('img.shape', img.shape)
img_info(img1)

# 5.图像求均值、标准差
def mean_dev(img):
    mean_img = cv2.mean(img)
    print('mean', mean_img)
    m, stddev = cv2.meanStdDev(img)
    print('m', m, '\n', 'StdDev', stddev)
mean_dev(img1)

# 6.遍历图像各个像素且取反(有问题)
def reverse_img(img):
    h, w, c = img.shape
    r_img = np.zeros([h, w, c])
    for row in range(h):
        for col in range(w):
            for ch in range(c):
                r_img[row, col, ch] = 255-img[row, col, ch]
    show('reverse_img', r_img)

# reverse_img(img1)

# 7.openCV取反函数
def not_img(img):
    not_img = cv2.bitwise_not(img)
    show('not_img', not_img)
not_img(img1)

# 8.图像色彩空间转换
def color_cvt_img(img):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    show('gray', gray)
    show('hsv', hsv)
color_cvt_img(img1)

# 9.对图片的某种颜色进行提取
def color_inrange(img):
    low = np.array([0, 0, 0])
    up = np.array([255, 100, 100])
    blue_img1 = cv2.inRange(img1, low, up)
    show('blue_img1', blue_img1)
color_inrange(img1)


# 10.通道分离、合并
def img_channel(img):
    b, g, r = cv2.split(img)
    show('blue', b)
    print('blue.shape', b.shape)
    merge_img = cv2.merge([b, g, r])
    show('merge_img', merge_img)
img_channel(img1)

3.结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值