python opencv imwrite ...找不到params

时间:2012-03-12 03:48:03

标签: python opencv

我正在使用opencv和python。我想做一个cv2.imwrte:

cv2.imwrite('myimage.png', my_im)

唯一的问题是opencv无法识别params常量:

cv2.imwrite('myimage.png', my_im, cv2.CV_IMWRITE_PNG_COMPRESSION, 0)

根本找不到CV_IMWRITE_PNG_COMPRESSION。有什么想法吗?

4 个答案:

答案 0 :(得分:24)

我在CV_XXXXX模块中找不到密钥cv2

  1. 尝试cv2.XXXXX
  2. 如果失败,请使用cv2.cv.CV_XXXXX
  3. 在您的情况下,cv2.cv.CV_IMWRITE_PNG_COMPRESSION


    更多信息。

    OpenCV(cv2接口)的文档有点令人困惑。

    通常看起来像CV_XXXX的参数实际上是cv2.XXXX

    我使用以下内容搜索相关的cv2常量名称。说我在寻找CV_MORPH_DILATE。我将在其中搜索MORPH的任何常量:

    import cv2
    nms = dir(cv2) # list of everything in the cv2 module
    [m for m in nms if 'MORPH' in m]
    # ['MORPH_BLACKHAT', 'MORPH_CLOSE', 'MORPH_CROSS', 'MORPH_DILATE',
    #  'MORPH_ELLIPSE', 'MORPH_ERODE', 'MORPH_GRADIENT', 'MORPH_OPEN',
    #  'MORPH_RECT', 'MORPH_TOPHAT']
    

    从此我看到MORPH_DILATE正是我正在寻找的。

    但是,有时候常量尚未从cv界面移到cv2界面。

    在这种情况下,您可以在cv2.cv.CV_XXXX下找到它们。

    所以,我为你找了IMWRITE_PNG_COMPRESSION而无法找到它(在cv2....下),所以我看了cv2.cv.CV_IMWRITE_PNG_COMPRESSION,嘿嘿!就在那里:

    >>> cv2.cv.CV_IMWRITE_PNG_COMPRESSION
    16
    

答案 1 :(得分:3)

扩展在math.coffee上以忽略大小写并查看两个名称空间:

import cv2
import cv2.cv as cv
nms  = [(n.lower(), n) for n in dir(cv)] # list of everything in the cv module
nms2 = [(n.lower(), n) for n in dir(cv2)] # list of everything in the cv2 module

search = 'imwrite'

print "in cv2\n ",[m[1] for m in nms2 if m[0].find(search.lower())>-1]
print "in cv\n ",[m[1] for m in nms if m[0].find(search.lower())>-1]

>>> 
in cv2
  ['imwrite']
in cv
  ['CV_IMWRITE_JPEG_QUALITY', 'CV_IMWRITE_PNG_COMPRESSION', 'CV_IMWRITE_PXM_BINARY']
>>>

希望这个问题会在以后的cv2版本中消失......

答案 2 :(得分:1)

自动从文件扩展名中选择压缩样式。请参阅cv2.imwrite help here

但是您可能仍然有兴趣知道cv2和cv模块中所有可能函数使用的所有可能标志。

在您的计算机上查找cv2.txt和cv.txt。它们将是opencv模块的安装位置。在这些文本文件的底部是各个模块使用的标志列表。

万一你没有找到它们,你可以从这里下载我的,虽然它们是从2011年8月开始的:

答案 3 :(得分:0)

实际上,使用cv2样式API,此常量将替换为cv2.IMWRITE_PNG_COMPRESSION