我正在使用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。有什么想法吗?
答案 0 :(得分:24)
我在CV_XXXXX
模块中找不到密钥cv2
:
cv2.XXXXX
cv2.cv.CV_XXXXX
在您的情况下,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
正是我正在寻找的。 p>
但是,有时候常量尚未从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
。