本实验因为本人做了很久也没有做出来,最后看到源代码恍然大悟,分享给大家!希望可以帮助到大家~

编程要求:

按照给定图片路径,写出彩色图像直方图的计算,并且输出其峰值和最小值。 彩色图像是RGB格式,因此,会有三个通道,每个通道都有其频率最大值和最小值。 应用matplotlib.pyplot()函数可能不能进行图片展示(可以应用imsaveifg(filename)函数进行临时保存到编译环境),但是也可以在本地环境中运行输出图片,但是一定要有matplotlib库,如果没有该库函数,图片不能进行展示,可以在本地python环境中安装,应用 pip install matplotlib指令进行安装和配置。

测试说明:

平台会对你编写的代码进行测试: 彩色图像是具有三通道(RGB模式)的,因此对每个通道都会进行统计和计算,会有三组数值,6行输出值。

预期输出:

格式:(记得要有换行操作)

max: xxx

min: xxx

max: xxx

min: xxx

max: xxx

min: xxx

"""
本次实训任务为对彩色图像进行直方图的计算,以卡通图片为例,你需要对RGB每个通道都进行计算和绘制直方图,
在这里考核的重点是对直方图的峰值(最大值)和最小值的输出,因为一副图像可以唯一确定一副直方图,该直方图的峰值(最大值)和最小值
也是唯一被确定的。所以根据提示,完善相应代码,相信你一定可以的。
"""
import sys
import cv2
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
#计算直方图函数,img参数为输入图像,img_plt为生成图像灰度直方图
def histCover(img, fileName):
    color = ["r", "g", "b"]
    # 展示原始图像
    ########## Begin ##########
    """
    任务1.展示原始图像,因为用到cv2函数读取,要用matplotlib库函数,所以应该转BGR格式为RGB格式
    """
    img = img[:,:, [2, 1, 0]]

    ########## End ##########
    plt.subplot(121)
    plt.imshow(img)
    plt.subplot(122)
    # 绘制彩色直方图,需要对每个通道进行遍历,并且找到最大值和最小值
    for index, c in enumerate(color):
        ########## Begin ##########
        """
        任务2.对每个通道进行直方图的计算和绘制,需要调用cv2的计算直方图函数,返回值为hist
        """

        hist = cv2.calcHist([img], [index], None, [256], [0, 255])

        ########## End ##########
        print('max:', max(hist))
        print('min:', min(hist))
        plt.plot(hist, color=c)
        plt.xlim([0, 255])
    plt.savefig(fileName)
    plt.show()
#主函数的定义,定义图片路径
def main_func(argv):
    img_path = 'histogram/step4/img_data/ex_1.jpg'
    img_plt='histogram/step4/stu_img/step4_plt.jpg'
    ########## Begin ##########
    """
    任务3.根据给出的图像路径,加载图像,图像数据路径为img_path,返回值为imgOri1
    """

    imgOri1 = cv2.imread(img_path)

    ########## End ##########
    histCover(imgOri1,img_plt)
if __name__ == '__main__':
    main_func(sys.argv)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐