第八次上机作业

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()

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值