源码如下:
# 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
查看评论