opencv学习笔记(三)图像处理基础1

11.二值图像、灰度图像、彩色图像

二值图像:仅包含白色和黑色两种颜色的图像,白色记为1,黑色记为0,如下图所示

灰度图像:用 [0,255] 表示256个灰度等级,0表示纯黑色,255表示纯白色。

彩色图像:由红绿蓝三通道组成;彩色空间中,存在R(红色)通道、G(绿色)通道、B(蓝色)通道、这三个通道,每个色彩通道值的范围都在[0,255]之间。

 注意:彩色空间中通道顺序是RGB,opencv中是B——G——R。

2.像素处理

import cv2
img = cv2.imread(r"D:\Program Files\JetBrains\opencv\xiaotaoxuejie.jpg",0)
cv2.imshow("before",img)

###嵌套语句,从10行到99行,从80列到99列,这个两个区域交叉部分的像素值设为255,即BGR三通道的像素值都为255
###range(a,b) 从a到b-1,含a但不包括b
for i in range(10,100):
    for j in range(80,100):
        img[i,j] = 255

cv2.imshow("after",img)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果为:

 用numpy生成一个三维数组,观察像素值、显示图像

import numpy as np
import cv2

#--------------蓝色通道------------
blue = np.zeros((300,500,3),dtype = np.uint8)  #3指的是rgb这3个通道,一个由300行300列位置构成的图像
blue[:,:,0] = 255   #将所有行和列的0通道(b通道)的像素值都设为255
print("blue = \n",blue)
cv2.imshow("blue",blue)

#--------------绿色通道------------
green = np.zeros((300,300,3),dtype = np.uint8)
green[:,:,1] =255   #将所有行和列的1通道(g通道)的像素值都设为255
print("green = \n",green)
cv2.imshow("green",green)

#-------------红色通道-------------
red = np.zeros((600,300,3),dtype = np.uint8)
red[:,:,2] = 255   #将所有行和列的1通道(b通道)的像素值都设为255
print("red = \n",red)
cv2.imshow("red",red)

#-------------释放窗口-------------
cv2.waitKey()
cv2.destroyAllWindows()

 运行结果如下:

 修改不同位置的不同通道的像素值

import numpy as np
import cv2
img = np.zeros((300,300,3),dtype = np.uint8)
img[:,0:100:,0] = 255
img[:,100:200,1] = 255
img[:,200:300,2] = 255
print('img = \n',img)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果如下:

 模拟BGR彩色图像,修改某个位置的像素值,观察变化

import numpy as np
import cv2
img = np.zeros((300,600,3), dtype = np.uint8)
print('img = \n',img)
print('读取像素点 img[0,3]=',img[0,3])  #访问0行3列位置上的B、G、R通道的3个像素值
print('读取像素点 img[1,2,2]=',img[1,2,2])  #访问1行2列位置上的R通道的像素值
print('读取像素点 img[0,0,0]=',img[0,0,0])
print('读取像素点 img[1,1,1]=',img[1,1,1])
print('读取像素点 img[1,2,0]=',img[1,2,0])
print('读取像素点 img[0,2,0]=',img[0,2,0])
cv2.imshow('imgbefore',img)
img [0:100,30:50] = 255  #0-100行,30-50列 的像素值变为255(白),【bgr三个通道的像素值都改为255】
img [0,0] = [66,77,88]   #0行0列的位置上的b通道、g通道、r通道的像素点的像素值分别改为66、77、88
img [1,1,1] = 3   #1行1列的1通道(B通道)的像素值修改为3
img [1,2,2] = 4
img [0,2,0] = 5
print('修改后 img\n',img)
print('读取修改后像素点 img[0,0,0]=',img[0,0,0])
print('读取修改后像素点 img[1,1,1]=',img[1,1,1])
print('读取修改后像素点 img[1,2,0]=',img[1,2,0])
print('读取修改后像素点 img[0,2,0]=',img[0,2,0])
cv2.imshow('imglast',img)
cv2.waitKey()

运行结果如下:

 修改前、后的读取:

3.彩色图像的像素值的访问修改

import cv2
img = cv2.imread('D:\Program Files\JetBrains\opencv/xiaotaoxuejie.jpg')
cv2.imshow("before",img)
#cv2.waitKey()
print('访问img[0,0]',img[0,0])      #访问0行0列的三个通道的像素值
print('访问img[0,0,0]',img[0,0,0])  #访问0行0列的b通道的像素值
print('访问img[0,0,1]',img[0,0,1])
print('访问img[0,0,2]',img[0,0,2])
print('访问img[50,0]',img[50,0])
print('访问img[100,0]',img[100,0])
#------区域1
for i in range(0,50):
    for j in range(0,100):
        for k in range(0,3):
            img[i,j,k] = 255 #白色
            # 0-50行, 0-100列的 三个通道的像素值都改为255
#------区域2
for i in range(50,100):
    for j in range(0,100):
            img[i,j] = [128,128,128] #灰色
            #50-100行 0-100列的三个通道的像素值都改为128
#------区域3
for i in range(100,150):
    for j in range(0,100):
        img[i,j] = 0   #黑色
        #100-150行 0-100列的三个通道的像素值都改为0
cv2.imshow("after",img)
print('访问img[0,0]',img[0,0])
print('访问img[0,0,0]',img[0,0,0])
print('访问img[0,0,1]',img[0,0,1])
print('访问img[0,0,2]',img[0,0,2])
print('访问img[50,0]',img[50,0])
print('访问img[100,0]',img[100,0])
cv2.waitKey()
cv2.destroyAllWindows()

运行结果如下:

如下图中箭头处所示的代码,倘若:

  • 不注释掉:则会在before图像显示后需按下键盘才能显示第二张after的图

  • 注释掉:两张图一起显示

原因:waiytKey()

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值