Opencv-python从入门到放弃 —— 针对图像像素的操作(2)

自己是一个菜鸡,希望通过写博客的方式提升自己,最近正好接触到了opencv,想把学习路程以博客的形式记录下来,也算是学习opencv的一种动力吧,好吧,话不多说,干就完了!

一、基础知识

  1. 一幅数字图像可以被看成是一个网格,网格上的每一个点都有一定的值。对于RGB图像就是一个点就代表了三个值,而灰度图像一个点代表了一个值,并且所有值都在[0, 255]区间内。
  2. RGB白色——(255, 255, 255),黑色(0, 0, 0), 绿色(255, 0, 0) 注意顺序为BGR。灰度图白色——255,黑色——0
  3. image[0, 0]代表了图像左上角点的值,而image[image.shape[0] - 1, image.shape[1] - 1]代表了图像右下角的值,这个值可能是个三元组或者是一个标亮,你懂的~。
  4. 既然是图像是一个numpy矩阵,那么就支持索引、切片操作,非常方便,顺手。

二、Demo

import cv2
import os

path = '/Users/mazhenyu/Code/opencv-python'
image = cv2.imread(os.path.join(path, 'newimage.jpg'))
if image.shape[2] == 3:
    print('这是RGB图像')
    (b, g, r) = image[0, 0]    # 读取RGB图像左上角的像素值,采用元组解包的方式进行读取
    print('左上角像素值蓝,绿,红通道分别为:%d,%d,%d' % (b, g, r))
    image[0, 0] = (0, 0, 255)  # 将左上角的像素值设为红色
    (b, g, r) = image[0, 0]    # 再读取出来
    print('设定像素值后,左上角像素蓝色通道值:%d,绿色通道值:%d,红色通道值:%d' % (b, g, image[0,0][2]))  # 证明成功对像素值进行了更改
    print('-----区域像素操作-------')
    image[20: 100, 20: 100] = (0, 255, 0)  # 根据numpy的切片操作来设定图像像素值,x轴范围[20, 99], y轴范围[20, 99]全部设为绿色
    cv2.imwrite('operation.jpg', image)    # 以jpg格式写到硬盘上
else:
    print('这是灰度图像')
    pass

运行结果:
operation.jpg
这是RGB图像
左上角像素值蓝,绿,红通道分别为:254,254,254
设定像素值后,左上角像素蓝色通道值:0,绿色通道值:0,红色通道值:255
—–区域像素操作——-

  1. 可以看出通过numpy来对图像进行操作是真的特别方便,极大的节省了实现某个算法的时间!
  2. 像素操作是in-place操作,会改变愿图像的像素值,如果不想破坏愿图像,先copy一下就好:image_copy = image.copy(),然后对image_copy操作就可以了。

猜你喜欢

转载自blog.csdn.net/Annihilation7/article/details/82501568