import CV2
创新互联建站始终坚持【策划先行,效果至上】的经营理念,通过多达10余年累计超上千家客户的网站建设总结了一套系统有效的营销推广解决方案,现已广泛运用于各行各业的客户,其中包括:成都工商代办等企业,备受客户赞赏。
import copy
import numpy as np
import random
使用的是pycharm
因为最近看了《银翼杀手2049》,里面Joi实在是太好看了所以原图像就用Joi了
要求是灰度图像,所以第一步先把图像转化成灰度图像
# 读入原始图像
img = CV2.imread('joi.jpg')
# 灰度化处理
gray = CV2.cvtColor(img, CV2.COLOR_BGR2GRAY)
CV2.imwrite('img.png', gray)
第一个任务是利用分段函数增强灰度对比,我自己随便写了个函数大致是这样的
def chng(a):
if a 255/3:
b = a/2
elif a 255/3*2:
b = (a-255/3)*2 + 255/6
else:
b = (a-255/3*2)/2 + 255/6 +255/3*2
return b
rows = img.shape[0]
cols = img.shape[1]
cover = copy.deepcopy(gray)
for i in range(rows):
for j in range(cols):
cover[i][j] = chng(cover[i][j])
CV2.imwrite('cover.png', cover)
下一步是直方图均衡化
# histogram equalization
def hist_equal(img, z_max=255):
H, W = img.shape
# S is the total of pixels
S = H * W * 1.
out = img.copy()
sum_h = 0.
for i in range(1, 255):
ind = np.where(img == i)
sum_h += len(img[ind])
z_prime = z_max / S * sum_h
out[ind] = z_prime
out = out.astype(np.uint8)
return out
covereq = hist_equal(cover)
CV2.imwrite('covereq.png', covereq)
在实现滤波之前先添加高斯噪声和椒盐噪声(代码来源于网络)
不知道这个椒盐噪声的名字是谁起的感觉隔壁小孩都馋哭了
用到了random.gauss()
percentage是噪声占比
def GaussianNoise(src,means,sigma,percetage):
NoiseImg=src
NoiseNum=int(percetage*src.shape[0]*src.shape[1])
for i in range(NoiseNum):
randX=random.randint(0,src.shape[0]-1)
randY=random.randint(0,src.shape[1]-1)
NoiseImg[randX, randY]=NoiseImg[randX,randY]+random.gauss(means,sigma)
if NoiseImg[randX, randY] 0:
NoiseImg[randX, randY]=0
elif NoiseImg[randX, randY]255:
NoiseImg[randX, randY]=255
return NoiseImg
def PepperandSalt(src,percetage):
NoiseImg=src
NoiseNum=int(percetage*src.shape[0]*src.shape[1])
for i in range(NoiseNum):
randX=random.randint(0,src.shape[0]-1)
randY=random.randint(0,src.shape[1]-1)
if random.randint(0,1)=0.5:
NoiseImg[randX,randY]=0
else:
NoiseImg[randX,randY]=255
return NoiseImg
covereqg = GaussianNoise(covereq, 2, 4, 0.8)
CV2.imwrite('covereqg.png', covereqg)
covereqps = PepperandSalt(covereq, 0.05)
CV2.imwrite('covereqps.png', covereqps)
下面开始均值滤波和中值滤波了
就以n x n为例,均值滤波就是用这n x n个像素点灰度值的平均值代替中心点,而中值就是中位数代替中心点,边界点周围补0;前两个函数的作用是算出这个点的灰度值,后两个是对整张图片进行
#均值滤波模板
def mean_filter(x, y, step, img):
sum_s = 0
for k in range(x-int(step/2), x+int(step/2)+1):
for m in range(y-int(step/2), y+int(step/2)+1):
if k-int(step/2) 0 or k+int(step/2)+1 img.shape[0]
or m-int(step/2) 0 or m+int(step/2)+1 img.shape[1]:
sum_s += 0
else:
sum_s += img[k][m] / (step*step)
return sum_s
#中值滤波模板
def median_filter(x, y, step, img):
sum_s=[]
for k in range(x-int(step/2), x+int(step/2)+1):
for m in range(y-int(step/2), y+int(step/2)+1):
if k-int(step/2) 0 or k+int(step/2)+1 img.shape[0]
or m-int(step/2) 0 or m+int(step/2)+1 img.shape[1]:
sum_s.append(0)
else:
sum_s.append(img[k][m])
sum_s.sort()
return sum_s[(int(step*step/2)+1)]
def median_filter_go(img, n):
img1 = copy.deepcopy(img)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
img1[i][j] = median_filter(i, j, n, img)
return img1
def mean_filter_go(img, n):
img1 = copy.deepcopy(img)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
img1[i][j] = mean_filter(i, j, n, img)
return img1
完整main代码如下:
if __name__ == "__main__":
# 读入原始图像
img = CV2.imread('joi.jpg')
# 灰度化处理
gray = CV2.cvtColor(img, CV2.COLOR_BGR2GRAY)
CV2.imwrite('img.png', gray)
rows = img.shape[0]
cols = img.shape[1]
cover = copy.deepcopy(gray)
for i in range(rows):
for j in range(cols):
cover[i][j] = chng(cover[i][j])
CV2.imwrite('cover.png', cover)
covereq = hist_equal(cover)
CV2.imwrite('covereq.png', covereq)
covereqg = GaussianNoise(covereq, 2, 4, 0.8)
CV2.imwrite('covereqg.png', covereqg)
covereqps = PepperandSalt(covereq, 0.05)
CV2.imwrite('covereqps.png', covereqps)
meanimg3 = mean_filter_go(covereqps, 3)
CV2.imwrite('medimg3.png', meanimg3)
meanimg5 = mean_filter_go(covereqps, 5)
CV2.imwrite('meanimg5.png', meanimg5)
meanimg7 = mean_filter_go(covereqps, 7)
CV2.imwrite('meanimg7.png', meanimg7)
medimg3 = median_filter_go(covereqg, 3)
CV2.imwrite('medimg3.png', medimg3)
medimg5 = median_filter_go(covereqg, 5)
CV2.imwrite('medimg5.png', medimg5)
medimg7 = median_filter_go(covereqg, 7)
CV2.imwrite('medimg7.png', medimg7)
medimg4 = median_filter_go(covereqps, 7)
CV2.imwrite('medimg4.png', medimg4)
这里的最好的分段输入的运算可以通过计算模式来完成虚拟手段
了解下什么是函数哈
你可以直接写
def f(x):
if x 5:
return x
if 1 x = 5:
return x + 1
if -3 x = 1:
return 0.5 * x + 1
return x - 1
# 以下为输入和调用
x = int(inpit())
res = f(x)
print(res)
x = int(input('请输入x的值:'))
if x5:
print('y =',x+5)
elif 5 = x 10:
print('y =',x*2)
elif x = 10:
print('y =',x**3)
分段函数的代码用python实现如下:
x=eval(input('输入x的值:'))
if x!=0:
y=1/(2*x-1)
else:
y=0
print(y)
jumpython分段函在python中可以进行不同函数的验算应用,同学们只需要好好地了解学习,就能够非常熟练的应用python中的各种功能。那今天让我们来看一看python如何去做一个分段函数呢?1.首先同学们需要打开python,想好去做分段函数的第一步,就是需要打开一个空白的编辑器,打开了空白的编辑器,同学们才能够更好地去进行操作。⒉.然后在空白的编辑器文件上编写程序,以x为未知数,进行各种操作之后,记得一定要方便计算平方和开方,在最后也要写好表达式,同学们一定要记录好结果。这样分段函数的程序就做好了,同学们可以利用这个程序进行简单的计算。3.之后同学们可以再打开这个程序,输入一些数字,最后在下面可以看到最终的结果。看到其中的过程就是分段函数计算的过程。在进行的过程中,只要操作没有问题,那么结果和过程就是没有问题的。本题目要求根据以下分段函数的定义,计算输入的x对应的y值,输出结果保留两位小数;如果输入的x是非数值型数据,输出'Input Error'。注意:使用math库输入格式:在一行中输入x的值。输出格式:按“f(x) = result”的格式输出,其中x与result都保留两位小数,注意'='两边有空格。如果输入的x是非数值型数据,输出:Input Error执行代码如下:try:import mathx=eval(input())if x0:print("f({:.2f}) = {:.2f}".format(x,math.log(x)+x**0.5))elif x=0:print("f(-{:.2f}) = 0.00".format(abs(x)))except NameError :print("Input Error")
¥
5.9
百度文库VIP限时优惠现在开通,立享6亿+VIP内容
立即获取
jumpython分段函
数据空间Datespace
jumpython分段函
在python中可以进行不同函数的验算应用,同学们只需要好好地了解学习,就能够非常熟练的应用python中的各种功能。那今天让我们来看一看python如何去做一个分段函数呢?
1.首先同学们需要打开python,想好去做分段函数的第一步,就是需要打开一个空白的编辑器,打开了空白的编辑器,同学们才能够更好地去进行操作。
⒉.然后在空白的编辑器文件上编写程序,以x为未知数,进行各种操作之后,记得一定要方便计算平方和开方,在最后也要写好表达式,同学们一定要记录好结果。这样分段函数的程序就做好了,同学们可以利用这个程序进行简单的计算。
第 1 页
3.之后同学们可以再打开这个程序,输入一些数字,最后在下面可以看到最终的结果。看到其中的过程就是分段函数计算的过程。在进行的过程中,只要操作没有问题,那么结果和过程就是没有问题的。
本题目要求根据以下分段函数的定义,计算输入的x对应的y值,输出结果保留两位小数;如果输入的x是非数值型数据,输出'Input Error'。注意:使用math库
输入格式: