计算机眼中的图像
像素
像素是图像的基本单位,每个像素存储着图像的颜色、亮度或者其他特征,一张图片就是由若干个像素组成的。
RGB
在计算机中,RGB三种颜色被称为RGB三通道,且每个通道的取值都是0到255之间。
计算机中图像的存储
我们要先弄清楚图像如何在计算机中存储,才能去很好的操作它们。在计算机中,图像的存储都是以【数组】的形式存在的。
一个RGB图像,其实就是一个三维数组,第一维度存【高度】,第二维度存【宽度】,第三维度存【颜色通道】。
注意一点:OpenCV中颜色存储不是RGB,而是BGR。
下面通过示例来解析三原色
对下面的 image 图像进行单元色分离,得出image_red、image_green和image_blue。
方法一:
import numpy as np
import matplotlib.pyplot as plt
#创建三维全 0 数组
img = np.zeros((700,700,3),dtype=np.uint8)
for i in range(0,700,100):
for j in range(0,700,100):
img[i,:,:] = (255,255,255)
img[:,j,:] = (255,255,255 )
if i!=0 and j!=0 and i!=600 and j!=600 and (i==j or i+j==600):
img[i:i+100,j:j+100,:] = (255,0,0)
#创建三通道图
img_red = np.zeros((700,700,3),dtype=np.uint8)
img_green = np.zeros((700,700,3),dtype=np.uint8)
img_blue = np.zeros((700,700,3),dtype=np.uint8)
#分离原图三原色
R = img[:,:,0]
G = img[:,:,1]
B = img[:,:,2]
#三原色赋值三通道
img_blue[:,:,0] = B
img_green[:,:,1] = G
img_red[:,:,2] = R
plt.subplot(232)
plt.imshow(img)
plt.subplot(234)
plt.imshow(img_red)
plt.subplot(235)
plt.imshow(img_green)
plt.subplot(236)
plt.imshow(img_blue)
plt.show()
方法二:
import cv2
import numpy as np
# cv2.imshow() #显示由cv2.imread()读取的图像
# cv2.rectangle() #绘制矩形
# cv2.waitKey() #用于用户等待时间,设置为0,表示无限等待
# cv2.split() #用于分隔图像
img = np.zeros((700,700,3),dtype=np.uint8)
for i in range(0,700,100):
for j in range(0,700,100):
top_left = (j,i)
bottom_right = (j+100-1,i+100-1)
if i!=0 and j!=0 and i!=600 and j!=600 and (i==j or i+j==600):
cv2.rectangle(img,top_left,bottom_right,(0,0,255),-1)
else:
cv2.rectangle(img,top_left,bottom_right,(255,255,255),2)
#创建三通道图
img_red = np.zeros((700,700,3),dtype=np.uint8)
img_green = np.zeros((700,700,3),dtype=np.uint8)
img_blue = np.zeros((700,700,3),dtype=np.uint8)
#分离原图三原色
B,G,R= cv2.split(img)
#三原色赋值三通道
img_blue[:,:,0] = B
img_green[:,:,1] = G
img_red[:,:,2] = R
cv2.imshow('image',img)
cv2.imshow('image_blue',img_blue)
cv2.imshow('image_green',img_green)
cv2.imshow('image_red',img_red)
cv2.waitKey(0)
OpenCV介绍
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它包含了众多关于图像处理和计算机视觉的通用算法,这些算法可以用于解决各种实际问题,比如人脸识别、物体检测、图像分割、视频分析等。OpenCV 提供了 C++、Python、Java 和 MATLAB 等多种语言的接口,其中 Python 接口由于其简洁性和易用性而特别受欢迎。
以下是 OpenCV Python 的一些关键特性和用途:
关键特性
- 丰富的功能:OpenCV 提供了大量的图像处理函数,包括滤波、边缘检测、形态学操作、图像变换、特征检测与匹配、相机标定与三维重建等。
- 高性能:OpenCV 是用 C++ 编写的,并进行了高度优化,因此在处理大规模图像数据时具有很高的性能。Python 接口通过调用底层的 C++ 实现来保持高效性。
- 跨平台:OpenCV 可以在多种操作系统上运行,包括 Windows、Linux、macOS 和 Android 等。
- 易于使用:OpenCV 的 Python 接口设计直观,易于学习和使用。同时,OpenCV 还提供了详细的文档和丰富的教程资源。
- 社区支持:OpenCV 拥有一个活跃的社区,用户可以在论坛、GitHub 和 Stack Overflow 等平台上寻求帮助和分享经验。
用途
- 图像处理:OpenCV 可以用于图像的滤波、去噪、增强、变换等操作,以改善图像的质量或提取有用的信息。
- 物体检测与识别:利用 OpenCV 提供的特征检测器(如 SIFT、SURF、ORB 等)和机器学习算法(如 SVM、随机森林等),可以实现物体的检测和识别。
- 视频分析:OpenCV 支持视频捕捉、处理和分析,可以用于视频跟踪、运动检测、背景减除等任务。
- 人脸识别:OpenCV 提供了多种人脸识别算法,如 Eigenfaces、Fisherfaces、LBPH(Local Binary Patterns Histograms)等,可以用于人脸检测、识别和验证。
- 三维重建:通过相机标定和立体视觉技术,OpenCV 可以实现三维场景的重建和测量。
- 增强现实(AR):OpenCV 可以与计算机图形学库结合使用,实现增强现实应用,如在真实场景中叠加虚拟对象。