700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python cv2(Opencv) Canny边缘检测 和 傅里叶变换

Python cv2(Opencv) Canny边缘检测 和 傅里叶变换

时间:2022-02-04 22:53:57

相关推荐

Python cv2(Opencv) Canny边缘检测 和 傅里叶变换

简介:

OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效,由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。本文主要介绍Python 中使用cv2(Opencv) 中Canny边缘检测 和 傅里叶变换及示例代码。

1、Canny边缘检测

Canny 边缘检测是一种从不同视觉对象中提取有用结构信息并显着减少要处理的数据量的技术。它已广泛应用于各种计算机视觉系统。 Canny 发现,在不同的视觉系统上应用边缘检测的要求是比较相似的。可以在各种情况下实施满足这些要求的边缘检测解决方案。边缘检测的一般标准包括:以低错误率检测边缘,这意味着检测应准确捕捉图像中显示的尽可能多的边缘。从操作员处检测到的边缘点应准确定位在边缘的中心。图像中的给定边缘应仅标记一次,并且在可能的情况下,图像噪声不应产生错误边缘。步骤如下:

1)使用高斯滤波器,以平滑图像,滤除噪声。

2)计算图像中每个像素点的梯度强度和方向。

3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。

4)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。

5)通过抑制孤立的弱边缘最终完成边缘检测。

edges = cv2.Canny( image, threshold1, threshold2[, apertureSize[, L2gradient]])

参数如下,

代码如下,

import cv2img=cv2.imread("cjavapy.jpg",cv2.IMREAD_GRAYSCALE)r1=cv2.Canny(img,128,200)r2=cv2.Canny(img,32,128)cv2.imshow("original",o)cv2.imshow("result1",r1)cv2.imshow("result2",r2)cv2.waitKey()cv2.destroyAllWindows()

2、傅里叶变换

一段信号可以由若干频率不同的正弦信号叠加构成,DFT将将信号从时域变换到频域。在图像处理过程中,傅里叶变换就是将图像分解为正弦分量和余弦分量两部分,即将图像从空间域转换到频域。

代码如下,

import cv2import numpy as npfrom matplotlib import pyplot as plt# 读图img = cv2.resize(cv2.imread('cjavapy.png', 0), (400, 400))# 傅里叶变换img_fft = np.fft.fft2(img)img_fft_shift = np.fft.fftshift(img_fft)img_fft_shift_ = 20 * np.log(np.abs(img_fft_shift))# 频域滤波img_fft_shift_process = img_fft_shift[:]print(img_fft_shift_process.shape)h, w = img_fft_shift_process.shape[:2]ch, cw = h // 2, w // 2img_fft_shift_process[ch - 50:ch + 50, cw - 50:cw + 50] = -10. # 高通滤波img_fft_shift_process_ = 20 * np.log(np.abs(img_fft_shift_process))# 傅里叶逆变换img_fft_ishift = np.fft.ifftshift(img_fft_shift_process)img_ifft = np.fft.ifft2(img_fft_ishift)img_ifft_ = np.abs(img_ifft)# 显示plt.subplot(2, 2, 1)plt.imshow(img, cmap='gray')plt.subplot(2, 2, 2)plt.imshow(img_fft_shift_, cmap='gray')plt.subplot(2, 2, 3)plt.imshow(img_fft_shift_process_, cmap='gray')plt.subplot(2, 2, 4)plt.imshow(img_ifft_, cmap='gray')plt.show()plt.close()

了解更多分析及数据抓取可查看:

:8989/

特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。