ADD file via upload

master
pgw247brm 2 years ago
parent 4b55880847
commit 5b13ea5a25

@ -0,0 +1,234 @@
import math
import cv2
import numpy as np
####################灰度图和二值化########################################
def gray_picture(img):
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
return img_gray
def erzhihua(image):
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
rst = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
return rst[1]
##################加噪###########################################################
def add_noisy(image, snr): #椒盐彩色
result = image.copy()
size = result.size
n1= int(size*(1-snr))
print(n1)
w, h = image.shape[:2]
for i in range(n1):
# 宽和高的范围内生成一个随机值模拟表x,y坐标
x = np.random.randint(1, w)
y = np.random.randint(1, h)
if np.random.randint(0, 2) == 0:
# 生成白色噪声(盐噪声)
result[x, y] = 0
else:
# 生成黑色噪声(椒噪声)
result[x, y] = 255
return result
"""
def add_noisy(image, n): #椒盐彩色
result = image.copy()
size = result.size
n= int(n)
w, h = image.shape[:2]
for i in range(n):
# 宽和高的范围内生成一个随机值模拟表x,y坐标
x = np.random.randint(1, w)
y = np.random.randint(1, h)
if np.random.randint(0, 2) == 0:
# 生成白色噪声(盐噪声)
result[x, y] = 0
else:
# 生成黑色噪声(椒噪声)
result[x, y] = 255
return result
"""
####################彩色图像添加高斯噪声#######################################
"""
def add_noise(image,mean,var):
img = np.array(image / 255, dtype=float)
noise = np.random.normal(mean, var ** 0.5, img.shape)
out_img = img + noise
if out_img.min() < 0:
low_clip = -1
else:
low_clip = 0
out_img = np.clip(out_img, low_clip, 1.0)
out_img = out_img * 255
return out_img
"""
def add_noise(image, mean=0.0, var=0.1):
img = np.array(image / 255, dtype=float)
noise = np.random.normal(mean, var, image.shape)
out_img = img + noise
if out_img.min() < 0:
low_clip = -1.
else:
low_clip = 0.
gauss_noise = np.clip(out_img, low_clip, 1.0)
gauss_noise = np.uint8(out_img * 255)
return out_img
################图像锐化#####################
def lap_9(image): #拉普拉斯变化
lap_9 = np.array([[-1, -1, -1], [-1, 9, -1], [-1, -1, -1]])
# 拉普拉斯9的锐化
image = cv2.filter2D(image, cv2.CV_8U, lap_9)
return image
def gama_transfer(img,power1=1.5): #伽马变化
if len(img.shape) == 3:
img= cv2.cvtColor(img,cv2.CV_8U)
img = 255*np.power(img/255,power1)
img = np.around(img)
img[img>255] = 255
out_img = img.astype(np.uint8)
return out_img
def get_imghist(img): #直方图均衡
# 判断图像是否为三通道;
if len(img.shape) == 3:
img = cv2.cvtColor(img, cv2.CV_8U)
# 无 Mask256个bins,取值范围为[0,255]
hist = cv2.calcHist([img], [0], None, [256], [0, 255])
return hist
def cal_equalhist(img):
if len(img.shape) == 3:
img = cv2.cvtColor(img, cv2.CV_8U)
h, w = img.shape[:2]
grathist = get_imghist(img)
zerosumMoment = np.zeros([256], np.uint32)
for p in range(256):
if p == 0:
zerosumMoment[p] = grathist[0]
else:
zerosumMoment[p] = zerosumMoment[p - 1] + grathist[p]
output_q = np.zeros([256], np.uint8)
cofficient = 256.0 / (h * w)
for p in range(256):
q = cofficient * float(zerosumMoment[p]) - 1
if q >= 0:
output_q[p] = math.floor(q)
else:
output_q[p] = 0
equalhistimage = np.zeros(img.shape, np.uint8)
for i in range(h):
for j in range(w):
equalhistimage[i][j] = output_q[img[i][j]]
return equalhistimage
"""
img = cv2.imread('img.jpg',1)
(b,g,r) = cv2.split(img) #通道分解
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
result = cv2.merge((bH,gH,rH),)#通道合成
res = np.hstack((img,result))
cv2.imshow('dst',res)
cv2.waitKey(0)
"""
################图像去噪####################################################
def boxFilterfun(image): #方波滤波
image=cv2.boxFilter(image,-1,(2,2),normalize=0)
return image
def medianBlurfun(image): #中值滤波
image=cv2.medianBlur(image,3)
return image
def bilateralFilterfun(image): #双边滤波
image=cv2.bilateralFilter(image,25,100,100)
return image
def GaussianBlurfun(image): #高斯滤波
image=cv2.GaussianBlur(image,(5,5),0,0)
return image
def blurfun(image): #均值滤波
image==cv2.blur(image,(5,5))
return image
###############图像翻转####################################################
def flipfun(image,x): #图像 水平翻转:0 垂直翻转:1 沿xy轴翻转:-1
image = cv2.flip(image,x)
return image
def fangsuo(image,x):
image = cv2.resize(image, (0, 0), fx=x, fy=x, interpolation=cv2.INTER_NEAREST)
return image
##############按位取反###################################################
def bitwise_notfun(image):
image = cv2.bitwise_not(image)
return image
##############轮廓检测####################################################
def morphologyExfun(image):
kernel = np.ones((3, 3), dtype=np.uint8)
image_gradient = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)
return image_gradient
#############sift检测#######################################################
def sift_fun(image):
sift = cv2.SIFT_create()
kps = sift.detect(image)
image_sift = cv2.drawKeypoints(image, kps, None, -1, cv2.DrawMatchesFlags_DEFAULT)
return image_sift
##################平均值池化#################################################
def average_poolingfun(img, G=4):
out = img.copy()
H, W, C = img.shape
Nh = int(H / G)
Nw = int(W / G)
for y in range(Nh):
for x in range(Nw):
for c in range(C):
out[G * y:G * (y + 1), G * x:G * (x + 1), c] = np.mean(
out[G * y:G * (y + 1), G * x:G * (x + 1), c]).astype(np.int)
return out
##################################修复####
def xiufu(image):
_, mask1 = cv2.threshold(image, 245, 255, cv2.THRESH_BINARY)
k = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
mask1 = cv2.dilate(mask1, k)
result1 = cv2.inpaint(image, mask1[:, :, -1], 5, cv2.INPAINT_NS)
return result1
if __name__ == '__main__':
image = cv2.imread("inpaint2.jpg")
cv2.imshow(' ',image)
newimage=xiufu(image)
cv2.imshow(' ',newimage)
cv2.waitKey(0)
Loading…
Cancel
Save