第九节:狂调各种API
一: 图像裁剪
原理:图像的各种几何变化
import cv2
import numpy as np
image = cv2.imread('./data/forest.jpg', cv2.IMREAD_GRAYSCALE)
# print(image.shape) # (379, 600)
# print(image.dtype) # 格式为uint8
# 进行图片的裁剪
image1 = image[:, :200] # 随便进行裁剪
cv2.imshow('image', image)
cv2.imshow('cut_image', image1)
cv2.waitKey()
cv2.destroyAllWindows()
结果输出:
二:边缘检测
原理介绍:边缘检测
import cv2
image = cv2.imread('./data/chair.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('origin', image)
h, w = image.shape # 获取图像的高度和宽度
# Sobel 滤波器 进行边的检测
sobel_horizontal = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=5) # 水平方向
sobel_vetical = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=5) # 垂直方向
cv2.imshow('sobel_H', sobel_horizontal) # 水平方向
cv2.imshow('sobel_V', sobel_vetical) # 垂直方向
# 拉普拉斯算子 进行边的检测 64F代表每一个像素点元素占64位浮点数
laplacian = cv2.Laplacian(image, cv2.CV_64F, ksize=5)
cv2.imshow('laplacian', laplacian)
# # Canny边检测器
canny = cv2.Canny(image, 50, 240)
cv2.imshow('Canny', canny)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果:
三: 直方图均衡化
原理介绍:直方图均衡化
import sys
import cv2
import numpy as np
image = cv2.imread("./data/sunrise.jpg")
# 查看一下图片
cv2.imshow('image', image) # 目前是彩色图像
# 接下来我们将其转为灰度图
img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('img_gray', img_gray) # 查看一下转变为灰度图的样子
# 均衡灰度图像的直方图,将其显示出来
img_gray_histeq = cv2.equalizeHist(img_gray)
cv2.imshow('Histogram equalized - grayscale', img_gray_histeq)
# 均衡彩色图像的直方图
img_yuv = cv2.cvtColor(image, cv2.COLOR_BGR2YUV)
img_yuv[:, :, 0] = cv2.equalizeHist(img_yuv[:, :, 0]) # 均衡y通道
# 将其转化为BGR
img_histeq = cv2.cvtColor(img_yuv, cv2.COLOR_YUV2BGR)
cv2.imshow("color_equal:", img_histeq)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果:
四:harris棱角检测
import cv2
import numpy as np
image = cv2.imread('./data/box.png')
cv2.imshow('image', image)
# 将图像转为灰度图,并将其强行转为浮点值, 浮点值将用于棱角的检测过程
img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
img_gray = img_gray.astype(np.float32)
# 哈里斯角检测
img_harris = cv2.cornerHarris(img_gray, 7, 5, 0.04)
# 为了标记棱角,需要将放大图像
img_harris = cv2.dilate(img_harris, None)
# 定义显示重要点个数的阈值
image[img_harris > 0.01 * img_harris.max()] = [0, 0, 0]
cv2.imshow('Harris corner', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果: