飞道的博客

open cv与python联合实现sobel和robert算子的图像处理——边缘检测效果展示可视化对比效果图

216人阅读  评论(0)

源码如下:

# coding=utf-8
import cv2
import numpy as np

# image = cv2.imread( "W:\PY\PYDD\ffgg\c.jpg" )

import cv2
import numpy as np
import matplotlib.pyplot as plt

#实现图片反色功能
def PointInvert(img):
    height, width, _ = img.shape
    for i in range(height):
        for j in range(width):
            pi = img[i, j]
            img[i, j] = 255 - pi
    return img

#读取原灰度图片
src_s=cv2.imread(r"W:\PY\PYDD\ffgg\hg.jpg")
cv2.imshow("src_s", src_s)#将原图片命名为“src_s”显示出来
#图片反色
src=PointInvert(src_s)
cv2.imshow("src_over", src)#将图片src_s反色处理后命名为“src”并显示出来

#SOBEL算子
sobel = cv2.Sobel(src,cv2.CV_64F, 1, 1, ksize=7)
cv2.imshow("sobel", sobel)#将SOBEL算子处理后的图片src命名为“sobel”并显示出来
#图片反色
sobel2=PointInvert(sobel)
cv2.imshow("sobel_over", sobel2)#将图片sobel反色处理后命名为“sobel2”并显示出来

#ROBERT算子
def Robert(img):
    h,w,_ = img.shape
    rob = [[-1,-1],[1,1]]
    for x in range(h):
        for y in range(w):
            if (y + 2 <= w) and (x + 2 <= h):
                imgChild = img[x:x+2, y:y+2, 1]
                list_robert = rob*imgChild
                img[x, y] = abs(list_robert.sum())# 求和加绝对值
    return img
robert = Robert(src)
cv2.imshow("robert", robert)#将ROBERT算子处理后的图片src命名为“robert”并显示出来

#图片反色
robert2=PointInvert(robert)
cv2.imshow("robert_over", robert2)#将图片robert反色处理后命名为“robert2”并显示出来
cv2.waitKey(0)

简单解释一下:
首先了解img.shape[]实用方法。都有 [0]、[1]、[2]。

img.shape[0]:图像的垂直尺寸(高度)

img.shape[1]:图像的水平尺寸(宽度)

img.shape[2]:图像的通道数

在矩阵中,[0]就表示行数,[1]则表示列数。
备注一下,也可能出现:与,的识别问题。
可以将imgChild = img[x:x+2, y:y+2]改为imgChild = img[x:x+2, y:y+2, 1]
参考链接:https://www.cnblogs.com/BIXIABUMO/p/12639418.html
效果如图:






转载:https://blog.csdn.net/dongbao520/article/details/115833689
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场