返回

不负初心,零基础快速入门OpenCV(二) - 基础功能

人工智能

OpenCV基础功能

图像转灰度

图像转灰度是将图像中的彩色信息转换为灰度信息,这样可以减少图像的复杂度,并简化后续的处理。在OpenCV中,可以使用cvtColor()函数将图像转为灰度。

import cv2

# 读入图像
image = cv2.imread('image.jpg')

# 将图像转为灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 显示灰度图像
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

阈值处理

阈值处理是一种图像分割技术,它将图像中的像素分为两类:前景和背景。前景像素的强度值大于或等于阈值,而背景像素的强度值小于阈值。在OpenCV中,可以使用threshold()函数进行阈值处理。

import cv2

# 读入图像
image = cv2.imread('image.jpg')

# 将图像转为灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 应用阈值处理
threshold, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)

# 显示二值图像
cv2.imshow('Binary Image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

轮廓检测

轮廓检测是一种提取图像中对象的边界的方法。在OpenCV中,可以使用findContours()函数进行轮廓检测。

import cv2

# 读入图像
image = cv2.imread('image.jpg')

# 将图像转为灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 应用阈值处理
threshold, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)

# 检测轮廓
contours, hierarchy = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

# 显示轮廓图像
cv2.imshow('Contour Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

边缘检测

边缘检测是一种检测图像中物体边缘的方法。在OpenCV中,可以使用Canny()函数进行边缘检测。

import cv2

# 读入图像
image = cv2.imread('image.jpg')

# 将图像转为灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 应用边缘检测
edges = cv2.Canny(gray_image, 100, 200)

# 显示边缘图像
cv2.imshow('Edge Image', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像金字塔

图像金字塔是一种图像表示方法,它将图像分解为一系列分辨率逐渐减小的图像。在OpenCV中,可以使用pyrDown()函数和pyrUp()函数构建图像金字塔。

import cv2

# 读入图像
image = cv2.imread('image.jpg')

# 构建图像金字塔
pyramid = [image]
for i in range(1, 5):
    image = cv2.pyrDown(image)
    pyramid.append(image)

# 显示图像金字塔
for i in range(len(pyramid)):
    cv2.imshow('Level ' + str(i), pyramid[i])
    cv2.waitKey(0)
cv2.destroyAllWindows()

直方图

直方图是一种统计图,它显示了图像中每个像素值的分布情况。在OpenCV中,可以使用calcHist()函数计算直方图。

import cv2
import matplotlib.pyplot as plt

# 读入图像
image = cv2.imread('image.jpg')

# 计算直方图
hist = cv2.calcHist([image], [0], None, [256], [0, 256])

# 显示直方图
plt.plot(hist)
plt.show()