首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在不使用外部模块的情况下使用Python打开/创建图像

如何在不使用外部模块的情况下使用Python打开/创建图像
EN

Stack Overflow用户
提问于 2018-07-22 00:20:51
回答 4查看 5.2K关注 0票数 2

我有一个python脚本,它使用OpenCV打开一个图像文件(.png或.ppm),然后将所有RGB值加载到一个多维Python数组(或列表)中,单独在Python数组上执行一些逐像素计算(在这个阶段根本不使用OpenCV ),然后使用新创建的数组(包含新的RGB值)再次使用OpenCV编写新的图像文件(这里是.png)。在这个脚本中根本没有使用Numpy。该程序运行良好。

问题是如何在不使用任何外部库的情况下做到这一点,无论它们是否用于图像处理(例如OpenCV、Numpy、Scipy、Pillow等)。总而言之,我需要使用Python的内部模块: 1.打开图像并读取RGB值,2.从预先计算的RGB值写入新图像。出于这个目的,我将使用Pypy而不是CPython,以提高速度。注:我使用Windows10,如果这很重要的话。

EN

回答 4

Stack Overflow用户

发布于 2018-07-22 03:55:43

你可以在没有OpenCVnumpy或任何讨厌你的东西的情况下编写这样的PPM文件:-

代码语言:javascript
复制
import array
width,height = 800,600

PPMheader = 'P6\n' +str(width) + ' ' +str(height) + '\n255\n'

# Create and fill a red PPM image
image = array.array('B', [255, 0, 0] * width * height)

# Save as PPM image
with open('result.ppm', 'wb') as f:
   f.write(bytearray(PPMheader, 'ascii'))
   image.tofile(f)

我也写了一个非常简单的PPM阅读器-它只读取与上面所写的匹配的24位P6 PPM文件。我猜它可以被充实以处理注释、16位数据和灰度数据,但这是一个开始:

代码语言:javascript
复制
#!/usr/local/bin/python3
import array

def ppmread(filename):
    with open(filename, 'rb') as f:
        # Read first line - expecting "P6"
        line = f.readline().decode('latin-1')
        if not line.startswith('P6'):
           print("ERROR: Expected PPM file to start with P6")
           return False

        # Read second line - expecting "width height"
        line = f.readline().decode('latin-1')
        dims = line.split()
        width,height=int(dims[0]),int(dims[1])

        # Read third line - expecting "255"
        line = f.readline().decode('latin-1')
        if not line.startswith('255'):
           print("ERROR: Expected 8-bit PPM with MAXVAL=255")
           return False

        image= f.read(width*height*3)

ppmread('test.ppm')

在终端中使用ImageMagick将PPM转换为PNG或JPEG:

代码语言:javascript
复制
convert result.ppm -auto-level image.png

或者:

代码语言:javascript
复制
convert result.ppm -resize 1024x768 image.jpg

同样,在终端中使用ImageMagick将JPEG转换为PPM:

代码语言:javascript
复制
convert image.jpg -depth 8 image.ppm
票数 4
EN

Stack Overflow用户

发布于 2018-07-22 01:58:51

处理基本的.ppm文件很简单:您有三行文本(P6、"width height“、255),然后是3*width*height字节。只要不需要更复杂的.ppm格式变体,就可以分别用5行代码编写一个加载器和一个保存器。

票数 1
EN

Stack Overflow用户

发布于 2018-07-22 02:17:40

您可以像打开文本文件一样打开图像文件。只需适应.png镜像的约定即可。

对于PNG,请查看https://fr.wikipedia.org/wiki/Portable_Network_Graphics并相应地阅读这些块

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51457993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档