1.计算机中的颜色采用RGB颜色系统,也就是每种颜色采用红绿蓝三种分量。每个颜色分量的取值范围为0~255,一共有256种可能。设计Color类,使用RGB颜色系统来表示颜色及相应功能,具体要求如下:
(1)定义三个私有属性r、g和b,分别对应红、绿、蓝三个颜色分量,范围0到255;
(2)添加构造函数,用于初始化红、绿、蓝三个颜色分量;
(3)通过装饰器@property定义三个可以作为属性访问的实例对象方法r()、g()和b();
(4)定义用于计算颜色亮度的方法luminance(self):Y = 0.299 r + 0.587g + 0.114b;
(5)定义用于转换为灰度颜色亮度的方法toGray(self);
(6)定义用于比较两种颜色兼容性的方法isCompatible(self, c)。颜色兼容性指在以一种颜色为背景时另一种颜色的可阅读性。一般而言,前景色和背景色的亮度差至少应该是128。例如,白纸黑字的亮度差为255;
(7)定义显示颜色分量信息的方法str(self)。
程序运行结果如下:
class Color:
def __init__(self,r=0,g=0,b=0):
self.__r=r
self.__g=g
self.__b=b
@property
def r(self):
return self.__r
@property
def g(self):
return self.__g
@property
def b(self):
return self.__b
def luminance(self):
Y=0.299*self.__r+0.587*self.__g +0.114*self.__b
return Y
def toGray(self):
n=round(self.luminance())
return Color(n,n,n)
def isCompatible(self,c):
m=self.luminance()
n=c.luminance()
d=m-n
if(d>=128):
return True
else:
return False
def str(self):
return ('({},{},{})'.format(self.__r,self.__g,self.__b))
p=Color(255,200,0)
c=Color(255,0,0)
print('颜色字符串:{}'.format(p.str()))
print('颜色分量:r={},g={},b={}'.format(p.r,p.g,p.b))
print('颜色亮度:{}'.format(p.luminance()))
print('转化为灰度颜色:{}'.format((p.toGray()).str()))
print('{}和{}是否匹配'.format(p.str(),c.str(),p.isCompatible(c)))
2.图像的直方图主要用于统计一幅图像中各个灰度级出现的次数或概率。从图形上来说, 灰度直方图是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率(见下图)。
设计Histogram类,统计一个列表中每个数据出现的次数,并绘制直方图。要求如下:(1)定义一个带整数参数n的构造函数,用于初始化存储数据的列表,列表的长度为n,列表各元素的初始值为0;
(2)定义实例对象方法addData(self,i),用于添加一个数据;
(3)定义用于计算数据个数,平均值,最大值,最小值的方法,即count(),mean(),max(),min();
(4)定义用于绘制简单直方图的方法draw()。
程序运行结果如下:
import random
import math
class Histogram:
def __init__(self, n):
self.__data = []
for i in range(n):
self.__data.append(0)
def addData(self, i):
self.__data[i] += 1
def count(self):
return sum(self.__data)
def mean(self):
return sum(self.__data)/len(self.__data)
def max(self):
return max(self.__data)
def min(self):
return min(self.__data)
def draw(self):
for i in self.__data:
print('#'*i)
st=Histogram(10)
for i in range(100):
score=random.randrange(0,10)
st.addData(math.floor(score))
print('数据个数:{}'.format(st.count()))
print('数据个数的平均值:{}'.format(st.mean()))
print('数据个数的最大值:{}'.format(st.max()))
print('数据个数的最小值:{}'.format(st.min()))
print("直方图:")
st.draw()