图像识别之边缘识别

'''
    边缘识别:物体的边缘检测是物体识别常用的手段。边缘检测常用亮度梯度方法。
            通过识别亮度梯度变化最大的像素点从而检测出物体的边缘。

        常用边缘检测算法相关API:
            # 索贝尔边缘识别
            # cv.CV_64F:卷积运算使用数据类型为64位浮点型(保证微分的精度)
            # 1:在水平方向使用索贝尔偏微分识别边缘
            # 0:不再垂直方向使用索贝尔偏微分识别边缘
            # ksize:卷积核为5*5的方阵
            cv.Sobel(original, cv.CV_64F, 1, 0, ksize=5)
            # 拉普拉斯边缘识别
            cv.Laplacian(original, cv.CV_64F)
            # Canny边缘识别
            # 50:水平方向阈值  240:垂直方向阈值
            cv.Canny(original, 50, 240)
'''

import cv2 as cv

original = cv.imread("./ml_data/chair.jpg", cv.IMREAD_GRAYSCALE)
print(original.shape)
cv.imshow('Original', original)
# 索贝尔边缘识别---水平方向
hsobel = cv.Sobel(original, cv.CV_64F, 1, 0, ksize=5)
cv.imshow('H-Sobel', hsobel)
# 索贝尔边缘识别---垂直方向
vsobel = cv.Sobel(original, cv.CV_64F, 0, 1, ksize=5)
cv.imshow('V-Sobel', vsobel)
# 索贝尔边缘识别---两方向
sobel = cv.Sobel(original, cv.CV_64F, 1, 1, ksize=5)
cv.imshow('Sobel', sobel)

# 拉普拉斯边缘识别
laplacian = cv.Laplacian(original, cv.CV_64F)
cv.imshow('Laplacian', laplacian)

# Canny边缘识别
canny = cv.Canny(original, 50, 240)
cv.imshow('Canny', canny)
cv.waitKey()

 

'''
    亮度提升:OpenCV提供了直方图均衡化的方式实现亮度提升,更有利于边缘识别与物体识别模型的训练。
        OpenCV直方图均衡化相关API:
                # 彩色图转为灰度图
                gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
                # 直方图均衡化
                equalized_gray = cv.equalizeHist(gray)

'''
import cv2 as cv

original = cv.imread('./ml_data/sunrise.jpg')
cv.imshow('Original', original)
# 彩色图转为灰度图
gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
cv.imshow('Gray', gray)
# 直方图均衡化
equalized_gray = cv.equalizeHist(gray)
cv.imshow('Equalized_gray', equalized_gray)

# 直接对颜色亮度均衡化
yuv = cv.cvtColor(original, cv.COLOR_BGR2YUV)
yuv[..., 0] = cv.equalizeHist(yuv[..., 0])
equalized_color = cv.cvtColor(yuv, cv.COLOR_YUV2BGR)
cv.imshow('Equalized  Color', equalized_color)


cv.waitKey()

  

 

posted @ 2019-07-28 09:46  一如年少模样  阅读(2074)  评论(0编辑  收藏  举报