第九节:狂调各种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()

输出结果: