Python+OpenCV+matplotlib+wxPython实现的图像处理程序

本文记录了一位学生在多媒体技术实验中的经历,通过Python、OpenCV和wxPython实现图像读取、转换、直方图绘制,展示了如何在限制条件下完成图像处理任务,同时介绍了使用wxPython创建GUI界面的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python+OpenCV+matplotlib+wxPython实现的图像处理程序

背景:本学期多媒体技术原理与应用课程的实验

本学期有一门课程是多媒体技术原理与应用,虽然看培养方案上没有实践课程,但是老师居然还准备了好几个实验,看来老师真是为我们着想。这次是第一个实验,题目比较简单:
编制程序,实现图像文件(如bmp等)的读取、显示、真彩图
转换成灰度图、灰度图转化为二值图及绘制图像直方图功能;

老师要求不允许在真彩图转灰度、灰度转二值图时不允许调库,即使不调库,用裸用python+opencv+matplotlib就可以不超过50行代码实现,就是直接遍历像素点的效率肯定是比不过人家封装好并且优化了的库函数(向np.where()以及cv.cvtColor()都是经过优化的,所以处理的时候明显感觉比库函数慢多了)。我想着即使不调库也很简单,不如整个GUI,还可以让用户自己选择要读取的文件,岂不美哉!于是,现学wxPython(其实就是照着网上教程走,然后有些坑的地方不断谷歌~,最后写出了成品(虽然还是很垃圾,但是相当于一个UI界面就显示完所有的图像,感觉体验比opencv直接冒出多个窗口好点,大佬勿喷 ~~~)

部分代码

主要是还要交实验报告,不方便直接把代码全贴上来,想要完整代码的朋友可以私信我~~~

#暂时只贴一个让我感到神奇的片段:gamma校正,就是将真彩图转换成灰度图(之前说过,老师不许调库)

#该方法将真彩色图转换成灰度图,由于不允许直接使用库函数,所以遍历每个像素点,并对其进行gamma校正,gamma一般取2.2
    def rgbToGray(self, event):
        g = self.colorImg.copy()
        w, h = g.shape[:2][::-1]
        for i in range(0, h):
            for j in range(0, w):
                x = int((1 * g[i, j][2]) ** 2.2) + int((1.5 * g[i, j][1]) ** 2.2) + int((0.6 * g[i, j][0]) ** 2.2)
                y = 1 ** 2.2 + 1.5 ** 2.2 + 0.6 ** 2.2
                g[i, j] = int((x / y) ** (1 / 2.2))
        pic = wx.Bitmap.FromBuffer(w, h, self.BGR2RGB(g))
        self.m_bitmap2.SetBitmap(pic)
        np.resize(self.grayImg,(w,h))
        self.grayImg=g

结果截图

点击第一个按钮后会弹出文件选择框,用户可以自己选择要展示的文件
点击第一个按钮后会弹出文件选择框,用户可以自己选择要展示的文件点击第二个按钮后可以将第一个按钮读取到的真彩色图像转换成灰度图像

点击第三个按钮后将灰度图转换成二值图
在这里插入图片描述点击第四个按钮后,我用的PyCharm开发工具,会在右侧的Plots中看到真彩图对应的图像直方图,然后再我们的UI界面也会看到一模一样的图像直方图。这个实现也不算难。

点击第一个按钮后会弹出文件选择框,用户可以自己选择要展示的图片

结语

虽然我写的很烂(不论是这次的代码还是博客,都写得很烂),但是我会不断改进的~
希望各位大佬们给个一键三连~~~

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值