我试图在John Zelle的《Python编程:计算机科学导论》中做一个练习。我为他的书下载了一个特殊的图形包(graphics.py,在链接的网站上)。问题如下:

编写一个将彩色图像转换为灰度的程序。用户提供包含GIF或PPM图像的文件名,程序加载图像并显示文件。单击鼠标,程序将图像转换为灰度。然后提示用户输入文件名以存储灰度图像。

您可能需要返回并查看图形库中的图像对象(第4.8.4节)。转换图像的基本思想是逐像素地进行转换,并将每个像素从颜色转换为适当的灰度。一种灰色像素,通过设置其红、绿、蓝分量具有相同的亮度而产生。所以,color_rgb(0, 0, 0)是黑色,color_rgb(255, 255, 255)是白色,color_rgb(127, 127, 127)是介于两者之间的灰色“中间”。您应该使用原始rgb值的加权平均值来确定灰色的亮度。以下是灰度算法的伪代码[由于某些原因,四个空格的缩进不用于预览]:for each row in the image:

for each column in the image:

r, g, b = get pixel information for current row and column

brightness = int(round(0.299r + 0.587g + 0.114b))

update the image # to see progress row by row

注意:Image类中的像素操作相当慢,因此您需要使用相对较小的图像(而不是1200万像素)来测试您的程序。

我已经为此工作了好几个小时了。这是我的代码的最新版本:# grayscale.py

from graphics import *

def main():

infileName = input("File name: ")

outfileName = input("Save to: ")

image = Image(Point(100,100), infileName)

width = image.getWidth()

height = image.getHeight()

win = GraphWin("rgb")

image.draw(win)

row = 0

column = 0

win.getMouse()

for row in range(200):

for column in range(200):

r, g, b = image.getPixel(row, column)

brightness = int(round(0.299 * r + 0.587 * g + 0.114 * b))

image.setPixel(row, column, color_rgb(brightness, brightness, brightness))

win.update()

win.getMouse()

win.close()

main()

我终于明白了,所以Python不会给我任何错误消息。但程序所做的只是加载图像,点击几下鼠标,然后关闭。我输入的输入文件是U:\ My Pictures\yay.gif,输出文件是U:\ My Pictures\yay2.gif。但我刚搜索了我的电脑,发现U:\ my Pictures\yay2.gif不存在。我做错什么了?顺便说一句,这不是给一个班的——我没有老师可以问。

也许我应该继续写下去。我添加了保存功能,但是我得到了一个带有200x200灰度框的图像,其余部分都是彩色的。我改了几行:win = GraphWin("rgb", width, height)

for row in range(height):

for column in range(width):

我得到以下错误消息:

回溯(最近一次呼叫):

文件“C:\ Python31\grayscale.py”,第31行,in

main()

文件“C:\ Python31\grayscale.py”,第22行,主

r、 g,b=image.getPixel(行,列)

getPixel中的文件“C:\ Python31\lib\graphics.py”,第810行

值=self.img.get(x,y)

文件“C:\ Python31\lib\tkinter\em>init.py”,第3301行,在get

返回self.tk.call(self.name,'get',x,y)

_tkinter.TclError:pyimage1 get:坐标超出范围

我知道我可能需要将图像的定位点改为中心。但我只能通过图像的宽度和高度来确定,我必须先上传图像才能得到这些值。有解决办法吗?

python将图像转换为灰度图像_Python3:将图像转换为灰色相关推荐

  1. 数字图像基础(二进制图像、灰度图像、RGB图像、索引图像和多帧图像)

    1. 图像的分类 根据图像的属性不同,图像分类的方法也不同. ①从获取方式上图像分为拍摄类图像和绘制类图像: ②从颜色上图像分为彩色图像.灰度图像和黑白图像等: ③从内容上图像分为人物图像.风景图像等 ...

  2. 二进制图像、灰度图像、RGB图像、索引图像

    二进制图像也称为二值图像,通常用一个二维数组来描述,1位表示一个像素,组成图像的像素值非0即1,没有中间值,通常0表示黑色,1表示白色.二进制图像一般用来描述文字或者图形,优点是占用空间少,缺点是当表 ...

  3. 基于python的图像格式转换(将RGB图像转换为灰度图像)

    1.将RGB图像转换为灰度图像: from PIL import Image I = Image.open('F:\\pycharm\\picture_format\\data\\lena.jpg') ...

  4. python将图像转化为灰度图像_在Python中,如何将RGB图像转换为灰度图像?

    我正在尝试使用matplotlib读取RGB图像并将其转换为灰度图像. 在matlab中,我使用这个: img = rgb2gray(imread('image.png')); 在matplotlib ...

  5. ITK:将RGB图像转换为灰度图像

    ITK:将RGB图像转换为灰度图像 内容提要 输出结果 C++实现代码 内容提要 将RGB图像转换为其亮度图像(灰度级一). 输出结果 C++实现代码 #include "itkImage. ...

  6. 在Python中使用OpenCV将RGB格式的图像转换为HSV格式的图像

    An HSV is another type of color space in which H stands for Hue, S stands for Saturation and V stand ...

  7. python 变量转二进制流_将图像转换为二进制流

    我的应用程序有两个方面,一方面,我使用C++来从PrORA的EBOSK SDK读取相机的帧.当第一次接收到该流时,在将缓冲器转换为图像之前,我能够一次读取流16位,以便对每个像素执行一些计算,即,对于 ...

  8. 视频图像数据处理三:将yuv420视频图像转换为灰度图像

    文章目录 函数代码 测试用例 下载 本文介绍了将yuv420视频图像转换为灰度图像的方法,附有详细的代码和图像示例.文中yuv420文件需要使用yuv/rgb播放器才能查看,参考播放器可选择雷神推荐的 ...

  9. python画黑白线条_将黑白图像完全转换为一组线(也称为仅使用线进行矢量化)...

    我有许多黑白图像,并希望将它们转换为一组线,这样我就可以从这些线完全或至少接近完全重建原始图像.换句话说,我正在尝试将图像矢量化为一组线. 我已经看过HoughLinesTransform,但是它并没 ...

最新文章

  1. 【干货】史上最全的Tensorflow学习资源汇总,速藏!
  2. 机器学习sklearn的快速使用--周振洋
  3. 放大电路分析方法、图解法分析放大电路
  4. iOS 开发-单元测试
  5. 别再拿div+css误导人了
  6. 开源公司黄页之Facebook开源软件推荐(一)
  7. PHP 空数组转Json字符串的问题
  8. 402.移掉K位数字
  9. mysql删除源码_mysql关于删除的命令实例源码删除数据库数据表等
  10. jsp里照片放在哪里_2020年初级会计报名照片怎么上传?
  11. oracle单纯的sql能写循环吗,循环执行sql语句
  12. 基础数学4:导数、偏导数、方向导数、梯度、全微分回顾
  13. html5页面适配方法,H5案例分享:HTML5移动页面适配方法
  14. 国际学校入学考试MAP语法测试题真题讲解
  15. (1)输入直角三角形的两个直角边的长度a,b,求斜边c的长度 (2) 编写一个程序,用于两个数的交换
  16. postgresql 页损坏(corrupted page)之checksum功能
  17. 简单使用SAXReader解析xml数据
  18. 免费的webservice接口 天气预报/IP查询/股票查询/手机归属地等
  19. 人像照片后期调色效果lr预设
  20. 用 QQ-Plot 验证正太分布

热门文章

  1. MyBatis 、MySQL 、Hibernate、ORM、JDBC
  2. python画魔法阵_Python编写循环的两个建议 | 鹅厂实战!
  3. [转载]J2ME无线开发之MIDlet的部署
  4. 使用ThinkPad T61有感
  5. 超宽带(UWB)学习笔记——测距性能分析的CRB(Cramer-Rao)界和ZZB(Ziv-Zaka)界
  6. 计算机专业人事制度改革,清华大学计算机科学与技术系
  7. 【b站黑马程序员C++视频学习笔记-多态案例二-制作饮品】
  8. Linux系统及应用(实验报告)---用户和用户组管理
  9. Bitnami Redmine的安装与配置
  10. p3371 单源最短路径(弱化版)-java题解-最短路