OpenCV入门——图像处理基础

OpenCV入门——图像处理基础图像处理基础表示方法二值图像像素点包含“0”,“1”。仅仅包含黑色和白色。只使用一个比特位就能够表示。也仅仅只能表示黑色和白色两种颜色2.灰度图像计算机会将灰度处理为256个灰度级即[0,255]。0为纯黑,255为纯白。需要使用8位二进制的值来表示。3.彩色图像比前两者表现出更丰富的细节,人的视网膜存在三种不同的颜色感受器。能够感受红色,绿色,蓝色,就是三基色。这三种颜色构成最经典的色彩空间就是RGB色彩空间。RGB色彩空间中存在r红色通道,g绿色…

图像处理基础

  • 表示方法
  1. 二值图像

  像素点包含“0”,“1”。仅仅包含黑色和白色。只使用一个比特位就能够表示。也仅仅只能表示黑色和白色两种颜色

    2.  灰度图像

  计算机会将灰度处理为256个灰度级即[0,255]。0为纯黑,255为纯白。需要使用8位二进制的值来表示。

    3. 彩色图像

  比前两者表现出更丰富的细节,人的视网膜存在三种不同的颜色感受器。能够感受红色,绿色,蓝色,就是三基色。这三种颜色构成最经典的色彩空间就是RGB色彩空间。RGB色彩空间中存在r红色通道,g绿色通道和b蓝色通道,一共三个通道,每个色彩通道值的范围都是在0到255之间。然后通过三个色彩通道的组合来形成各种颜色。可以把不同通道的数值大小理解成红绿蓝三种颜色按不同比例进行混合之后所得到的颜色。

但需要注意的是,opencv中通道的顺序为b,g,r。

在实际的图像处理过程中可以根据需要对图像的通道顺序进行转换。当然也可以根据需要对不同色彩空间的图像进行类型转换。

 

  • 像素处理
  1. 二值图像及灰度图像

  对于opencv中最小的数据类型是无符号的八位数。所以在opencv中是没有二值图像这种数据类型。二值图像通常是通过处理之后才得到的。用0表示黑色,用255表示白色。所以可以把二是图像理解为特殊的灰度图像。图像本质上就是矩阵这种数组的运算。呃灰度图像就可以看作是二维数组。

下面用一段程序来模拟二维数组创建一副黑色图像,并且对其进行访问和修改。

import cv2
import numpy as np
img=np.zeros((8,8),dtype=np.uint8)
print("img=\n",img)
cv2.imshow("one",img)
print("读取像素点img[0,3]=",img[0,3])
img[0,3]=255
print("修改后img=\n",img)
print("读取修改后像素点img[0,3]=",img[0,3])
cv2.imshow("two",img)
cv2.waitKey()
cv2.destroyAllWindows()

下面通过一段程序来读取一个灰度图像,然后对其中的像素进行访问和修改。

import cv2
img=cv2.imread("lena.bmp",0)
cv2.imshow("before",img)
for i in range(10,100):
    for j in range(80,100):
        img[i,j]=255
cv2.imshow("after",img)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV入门——图像处理基础

我们可以看到,二维数组和图像之间存在着这种对应关系。

 

  1. 彩色图像

  rgb模式的彩色图像在读入opencv中处理时会按照行方向依次读取该rgb图像的b通道,g通道,r通道的像素点。图像的第一个索引表示行,第二个索引表示列,第三个索引表示颜色通道。

可以用Numpy生成一个三维数组,用来模拟bgr模式的彩色图像,然后对其像素进行访问和修改。

import numpy as np
import cv2
#-----------蓝色通道值--------------
blue=np.zeros((300,300,3),dtype=np.uint8)
blue[:,:,0]=255
print("blue=\n",blue)
cv2.imshow("blue",blue)
#-----------蓝色通道值--------------
green=np.zeros((300,300,3),dtype=np.uint8)
green[:,:,1]=255
print("green=\n",green)
cv2.imshow("green",green)
#-----------蓝色通道值--------------
red=np.zeros((300,300,3),dtype=np.uint8)
red[:,:,2]=255
print("red=\n",red)
cv2.imshow("red",red)
#-----------释放窗口--------------
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV入门——图像处理基础

读取彩色图像,并对像素进行修改访问。

import cv2
img=cv2.imread("lenacolor.png")
cv2.imshow("before",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])
#区域1
for i in range(0,50):
    for j in range(0,100):
        for k in range(0,3):
            img[i,j,k]=255  #白色
#区域2
for i in range(50,100):
    for j in range(0,100):
        img[i,j]=[128,128,128]  #灰色
#区域3
for i in range(100,150):
    for j in range(0,100):
        img[i,j]=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()

OpenCV入门——图像处理基础

  • 访问像素
  1. 二值图像及灰度图像
  2. 彩色图像

两者都是采用item函数获取相应元素,再用itemset设置对应位置上面的数值

语法格式为

灰度

item(行,列)

itemset((行,列),赋予的值)

彩色

item(行,列,通道)

itemset((行,列,通道),赋予的值)

import cv2
img=cv2.imread("lenacolor.png")
cv2.imshow("before",img)
print("访问img.item(0,0,0)=",img.item(0,0,0))
print("访问img.item(0,0,1)=",img.item(0,0,1))
print("访问img.item(0,0,2)=",img.item(0,0,2))
for i in range(0,50):
    for j in range(0,100):
        for k in range(0,3):
            img.itemset((i,j,k),255)     #白色
cv2.imshow("after",img)
print("修改后img.item(0,0,0)=",img.item(0,0,0))
print("修改后img.item(0,0,1)=",img.item(0,0,1))
print("修改后img.item(0,0,2)=",img.item(0,0,2))
cv2.waitKey()
cv2.destroyAllWindows()

此处仅展示彩色图像修改

OpenCV入门——图像处理基础

  • 感兴趣区域ROI

  在实际的图像处理过程中,我们可能会对图像的某一特定区域感兴趣。可以被称为region of interest (ROI)我们可以对该区域进行整体的操作。比如可以进行复制,处理和修改。

import cv2
import numpy as np
a=cv2.imread("lenacolor.png",cv2.IMREAD_UNCHANGED)
cv2.imshow("original",a)
face=np.random.randint(0,256,(180,100,3))
a[220:400,250:350]=face
cv2.imshow("result",a)
cv2.waitKey()
cv2.destroyAllWindows()

对脸部打码

OpenCV入门——图像处理基础

 

  • 通道操作

针对RGB图像,可以将其拆分为r,g,b3个通道。​共有两种方式,一种是使用索引,一种是使用相应的函数。
下面将通过几段程序来展现。​

#索引通道拆分
import cv2
lena=cv2.imread("lenacolor.png")
cv2.imshow("lena1",lena)
b=lena[:,:,0]
g=lena[:,:,1]
r=lena[:,:,2]
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
lena[:,:,0]=0
cv2.imshow("lenab0",lena)
lena[:,:,1]=0
cv2.imshow("lenab0g0",lena)
cv2.waitKey()
cv2.destroyAllWindows()

#函数拆分
import cv2
lena=cv2.imread("lenacolor.png")
b,g,r=cv2.split(lena)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
cv2.waitKey()
cv2.destroyAllWindows()


#合并

import cv2
lena=cv2.imread("lenacolor.png")
b,g,r=cv2.split(lena)
bgr=cv2.merge([b,g,r])
rgb=cv2.merge([r,g,b])
cv2.imshow("lena",lena)
cv2.imshow("bgr",bgr)
cv2.imshow("rgb",rgb)
cv2.waitKey()
cv2.destroyAllWindows()
  • 获取属性

包括行数,列数,通道数,像素数等

import cv2
gray=cv2.imread("lena.bmp",0)
color=cv2.imread("lenacolor.png")
print("图像gray属性:")
print("gray.shape=",gray.shape)
print("gray.size=",gray.size)
print("gray.dtype=",gray.dtype)
print("图像color属性:")
print("color.shape=",color.shape)
print("color.size=",color.size)
print("color.dtype=",color.dtype)

 

                                                                                                                                                                                                                              如果有什么疑问,欢迎在评论区或私信讨论呦(*^_^*)

今天的文章OpenCV入门——图像处理基础分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/31432.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注