首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:如何读取图像属性/统计信息?

Python:如何读取图像属性/统计信息?
EN

Stack Overflow用户
提问于 2014-10-16 12:32:46
回答 2查看 1.1K关注 0票数 0

我试图提取图像的统计数据,如“平均值”、“标准差”等。然而,我在python文档中找不到任何与它相关的信息。

在命令行中,我可以获得这样的统计数据:

代码语言:javascript
复制
convert MyImage.jpg -format '%[standard-deviation], %[mean], %[max], %[min]' info:

代码语言:javascript
复制
convert MyImage.jpg -verbose info:

如何使用魔杖从python程序中获取这样的信息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-16 17:48:21

目前,魔棒不支持ImageMagick的C( 直方图EXIF之外)的任何统计方法。幸运的是,为扩展功能提供了wand.api

  1. 在MagickWand的文档中找到您需要的方法
  2. 使用C型实现数据类型/结构(文件)
代码语言:javascript
复制
from wand.api import library
import ctypes

class ChannelStatistics(ctypes.Structure):
    _fields_ = [('depth', ctypes.c_size_t),
                ('minima', ctypes.c_double),
                ('maxima', ctypes.c_double),
                ('sum', ctypes.c_double),
                ('sum_squared', ctypes.c_double),
                ('sum_cubed', ctypes.c_double),
                ('sum_fourth_power', ctypes.c_double),
                ('mean', ctypes.c_double),
                ('variance', ctypes.c_double),
                ('standard_deviation', ctypes.c_double),
                ('kurtosis', ctypes.c_double),
                ('skewness', ctypes.c_double)]

library.MagickGetImageChannelStatistics.argtypes = [ctypes.c_void_p]
library.MagickGetImageChannelStatistics.restype = ctypes.POINTER(ChannelStatistics)
  1. 扩展wand.image.Image,并使用新支持的方法。
代码语言:javascript
复制
from wand.image import Image

class MyStatisticsImage(Image):
    def my_statistics(self):
        """Calculate & return tuple of stddev, mean, max, & min."""
        s = library.MagickGetImageChannelStatistics(self.wand)
        # See enum ChannelType in magick-type.h
        CompositeChannels = 0x002F
        return (s[CompositeChannels].standard_deviation,
                s[CompositeChannels].mean,
                s[CompositeChannels].maxima,
                s[CompositeChannels].minima)
票数 2
EN

Stack Overflow用户

发布于 2017-03-01 18:05:40

以下是@emcconville给任何人的一个很好的建议:

  1. imagemagick站点上的文档为v7.x
  2. 魔杖只适用于imagemagick 6.x
  3. 在IM6.x中,实际上在_ChannelStatistics的末尾还有一个字段,称为熵,如果将它排除在ChannelStatistics声明之外,您的结构将不能与返回的内容正确地对齐,这将包含一堆废话。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26404572

复制
相关文章

相似问题

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