OpenCV-Python快速入门(二):图像基础

  • ​​前言​​
  • ​​前提条件​​
  • ​​实验环境​​
  • ​​图像基础​​
  • ​​二值图像、灰度图像、彩色图像​​
  • ​​修改灰度图像素​​
  • ​​修改彩色图像素​​
  • ​​Numpy处理像素​​
  • ​​感兴趣区域ROI​​
  • ​​通道拆分​​
  • ​​通道合并​​
  • ​​图像属性​​
  • ​​参考文献​​

前言

  • 本文是个人快速入门OpenCV-Python的电子笔记,由于水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入​
    OpenCV-Python快速入门​​专栏或我的​​个人主页​​查看

前提条件

实验环境

  • Python 3.x (面向对象的高级语言)
  • OpenCV 4.0(python第三方库)​​pip3 install opencv-python​

图像基础

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

  • 二值图像是指仅仅包含黑色(0)和白色(1)两种颜色的图像。
  • 灰度图像又称灰阶图。把白色与黑色之间按对数关系分为若干等级,称为灰度。灰度分为256阶,即256 个灰度级,用数值区间[0, 255]来表示。其中,数值“255”表示纯白色,数值“0”表示纯黑色,其余的数值表示从纯白到纯黑之间不同级别的灰度。
  • 彩色图像是指每个像素由R、G、B分量构成的图像,其中R、G、B是由不同的灰度级来描述的。

修改灰度图像素

import cv2
img=cv2.imread("1.jpg",0)
cv2.imshow("origin",img)
for i in range(10,100):
for j in range(80,100):
img[i,j]=255
cv2.imshow("alter",img)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV-Python快速入门(二):图像基础_彩色图像

修改彩色图像素

import cv2
img=cv2.imread("1.jpg")
cv2.imshow("origin",img)
# 访问 img 中第 0 行第 0 列位置上的 B 通道、G 通道、R 通道三个像素点
print("访问 img[0,0]=",img[0,0])
# 访问 img 中第 0 行第 0 列位置上的 B 通道
print("访问 img[0,0,0]=",img[0,0,0])
# 访问 img 中第 0 行第 0 列位置上的 G 通道
print("访问 img[0,0,1]=",img[0,0,1])
# 访问 img 中第 0 行第 0 列位置上的 R 通道
print("访问 img[0,0,2]=",img[0,0,2])
#修改指定位置为黑色区域
for i in range(0,50):
for j in range(0,100):
for k in range(0,3):
img[i,j,k]=0 #黑色
#修改指定位置为绿色区域
for i in range(50,100):
for j in range(0,100):
img[i,j]=[0,255,0] #绿色
#修改指定位置为白色区域
for i in range(100,150):
for j in range(0,100):
img[i,j]=255 # 白色
cv2.imshow("alter",img)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV-Python快速入门(二):图像基础_灰度图像_02

Numpy处理像素

import numpy as np
import cv2
# 随机生成一幅 400×400 大小的灰度图像
img=np.random.randint(0,256,size=[400,400],dtype=np.uint8)
print(img)
print(img.shape)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV-Python快速入门(二):图像基础_灰度图像_03

import cv2
import numpy as np
# 随机生成一幅 256×256×3 的彩色图像
img=np.random.randint(0,256,size=[400,400,3],dtype=np.uint8)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV-Python快速入门(二):图像基础_彩色图像_04

感兴趣区域ROI

import cv2
img=cv2.imread("3.jpg")\
# 取原图像高68像素到450像素,宽取30像素到450像素
cat=img[20:450,68:450] # ROI
cv2.imshow("origin",img)
cv2.imshow("cat",cat)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV-Python快速入门(二):图像基础_opencv_05

通道拆分

import cv2
img=cv2.imread("1.jpg")
b,g,r=cv2.split(img)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
# 或者
# b=img[:,:,0]
# g=img[:,:,1]
# r=img[:,:,2]
# cv2.imshow("B",b)
# cv2.imshow("G",g)
# cv2.imshow("R",r)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV-Python快速入门(二):图像基础_彩色图像_06

通道合并

import cv2
img=cv2.imread("1.jpg")
b,g,r=cv2.split(img)
BGR=cv2.merge([b,g,r])
RGB=cv2.merge([r,g,b])
cv2.imshow("img",img)
cv2.imshow("BGR",BGR)
cv2.imshow("RGB",RGB)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV-Python快速入门(二):图像基础_python_07

注意:OpenCV是以BGR模式的三维数组形式存储

图像属性

import cv2
img=cv2.imread("1.jpg")
img_gray=cv2.imread("1.jpg",0)
print("彩色图像属性:")
print("img.shape=",img.shape)
print("img.size=",img.size)
print("img.dtype=",img.dtype)
print("灰度图像属性:")
print("img_gray.shape=",img_gray.shape)
print("img_gray.size=",img_gray.size)
print("img_gray.dtype=",img_gray.dtype)

OpenCV-Python快速入门(二):图像基础_彩色图像_08

参考文献

[1] https://opencv.org/

  • 更多精彩内容,可点击进入​
    OpenCV-Python快速入门​​专栏或我的​​个人主页​​查看