我是靠谱客的博主 迷你小刺猬,最近开发中收集的这篇文章主要介绍python 边缘计算_边缘检测(各类边缘算子)以及角点检测 python-人工智能,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

编辑推荐:

本文主要介绍了边缘检测的各类边缘算子,以及对原图及它旋转变换后的图像进行角点检测

,希望对您的学习有所帮助。

本文来自于CSDN,由火龙果软件Alice编辑、推荐。

边缘检测:

1.Roberts算子

2.Prewitt算子

3.Sobel算子

4.Laplacian算子

5.Canny函数

代码如下:

import cv2

import numpy as np

import matplotlib.pyplot as plt

image = cv2.imread('lenna.jpg', cv2.IMREAD_GRAYSCALE)

cv2.imshow('origin', image)

h, w = image.shape # 获取图像的高度和宽度

# Roberts算子

kernelx = np.array([[-1, 0], [0, 1]], dtype=int)

kernely = np.array([[0, -1], [1, 0]], dtype=int)

x = cv2.filter2D(image, cv2.CV_16S, kernelx)

y = cv2.filter2D(image, cv2.CV_16S, kernely)

absX = cv2.convertScaleAbs(x)

absY = cv2.convertScaleAbs(y)

Roberts = cv2.addWeighted(absX, 0.5, absY, 0.5,

0)

cv2.imshow('Roberts', Roberts )

# Prewitt算子

kernelx = np.array([[1, 1, 1], [0, 0, 0], [-1,

-1, -1]], dtype=int)

kernely = np.array([[-1, 0, 1], [-1, 0, 1],

[-1, 0, 1]], dtype=int)

x = cv2.filter2D(image, cv2.CV_16S, kernelx)

y = cv2.filter2D(image, cv2.CV_16S, kernely)

absX = cv2.convertScaleAbs(x)

absY = cv2.convertScaleAbs(y)

Prewitt = cv2.addWeighted(absX, 0.5, absY, 0.5,

0)

cv2.imshow('Prewitt', Prewitt)

# 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()

结果图如下

Roberts

prewitt

Laplacian

canny

Sobel_v

sobel_h

设计检测具有特定角度边缘的算子;

检测具有45o角的边缘的3×3算子;

检测具有45o角的边缘的5×5算子;

这里我使用的是prewitt模板

3x3代码如下:

import cv2

import numpy as np

import matplotlib.pyplot as plt

image = cv2.imread('lenna.jpg', cv2.IMREAD_GRAYSCALE)

cv2.imshow('origin', image)

# Roberts算子

kernelx = np.array([[1, 1, 0], [1, 0, -1], [0,

-1, -1]], dtype=int)

kernely = np.array([[1, 1, 0], [1, 0, -1], [0,

-1, -1]], dtype=int)

x = cv2.filter2D(image, cv2.CV_16S, kernelx)

y = cv2.filter2D(image, cv2.CV_16S, kernely)

absX = cv2.convertScaleAbs(x)

absY = cv2.convertScaleAbs(y)

Prewitt = cv2.addWeighted(absX, 0.5, absY, 0.5,

0)

cv2.imshow('Prewitt', Prewitt)

cv2.waitKey(0)

cv2.destroyAllWindows()

5x5代码如下

import cv2

import numpy as np

import matplotlib.pyplot as plt

image = cv2.imread('lenna.jpg', cv2.IMREAD_GRAYSCALE)

cv2.imshow('origin', image)

# Roberts算子

kernelx = np.array([[1, 1, 1, 1, 0], [1, 1,

1, 0, -1], [1,1,0, -1, -1],[1,0,-1,-1,-1],[0,-1,-1,-1,-1]],

dtype=int)

kernely = np.array([[1, 1, 1, 1, 0], [1, 1,

1, 0, -1], [1,1,0, -1, -1],[1,0,-1,-1,-1],[0,-1,-1,-1,-1]],

dtype=int)

x = cv2.filter2D(image, cv2.CV_16S, kernelx)

y = cv2.filter2D(image, cv2.CV_16S, kernely)

absX = cv2.convertScaleAbs(x)

absY = cv2.convertScaleAbs(y)

Prewitt = cv2.addWeighted(absX, 0.5, absY, 0.5,

0)

cv2.imshow('Prewitt', Prewitt)

cv2.waitKey(0)

cv2.destroyAllWindows()

角点检测

import cv2 as

cv

import numpy as np

from matplotlib import pyplot as plt

def cornerHarri(imgae):

gray = cv.cvtColor(imgae, cv.COLOR_BGR2GRAY)

gray = np.float32(gray)

dst = cv.cornerHarris(gray, 2, 3, 0.04)

dst = cv.dilate(dst, None)

imgae[dst>0.01*dst.max()]=[0,0,255]

src = cv.imread("whiteandblack.jpg")

rows, cols, channel = src.shape

#绕图像的中心旋转

#参数:旋转中心 旋转度数 scale

M = cv.getRotationMatrix2D((cols/2, rows/2),

30, 1)

#参数:原始图像 旋转参数 元素图像宽高

rotated = cv.warpAffine(src, M, (cols, rows))

cv.imshow("contours", src)

cornerHarri(src)

cv.imshow("corn",src)

cornerHarri(rotated)

cv.imshow("corn1",rotated)

cv.waitKey(0)

cv.destroyAllWindows()

这里是对原图及它旋转变换后的图像进行角点检测

图像如下

原图:

角点检测后:

旋转后的角点检测:

使用cv2.goodFeaturesToTrack()检测角点

道理一样下面给出代码(结果图就不放了):

import numpy

as np

import cv2

from matplotlib import pyplot as plt

def track(imgae):

gray = cv2.cvtColor(rotated,cv2.COLOR_BGR2GRAY)

corners = cv2.goodFeaturesToTrack(gray,25,0.01,10)

corners = np.int0(corners)

for i in corners:

x,y = i.ravel()

cv2.circle(rotated,(x,y),3,255,-1)

img = cv2.imread('whiteandblack.jpg')

rows, cols, channel = img.shape

#绕图像的中心旋转

#参数:旋转中心 旋转度数 scale

M = cv2.getRotationMatrix2D((cols/2, rows/2),

30, 1)

#参数:原始图像 旋转参数 元素图像宽高

rotated = cv2.warpAffine(img, M, (cols, rows))

cv2.imshow("contours", img)

track(img)

cv2.imshow("corn",img)

track(rotated)

cv2.imshow("corn1",rotated)

cv.waitKey(0)

cv.destroyAllWindows()

最后

以上就是迷你小刺猬为你收集整理的python 边缘计算_边缘检测(各类边缘算子)以及角点检测 python-人工智能的全部内容,希望文章能够帮你解决python 边缘计算_边缘检测(各类边缘算子)以及角点检测 python-人工智能所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部