【9】python-opencv3教程:狂调各种opencv的API(图像裁剪,边缘检测,直方图均衡化,检测棱角,SIFT特征检测)

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

输出结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

传道解惑也

打赏一下咯

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值