Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV Python保存jpg指定质量;给出了系统错误_Python_Opencv_Jpeg - Fatal编程技术网

OpenCV Python保存jpg指定质量;给出了系统错误

OpenCV Python保存jpg指定质量;给出了系统错误,python,opencv,jpeg,Python,Opencv,Jpeg,我刚刚在windows 7(32位)/Python 2.7.3上安装了最新的OpenCV 2.4,但我仍然收到与使用beta版时相同的错误: >>> import cv2 >>> a = cv2.imread(r"DMap.jpg") >>> a.shape (1080, 1920, 3) >>> cv2.imwrite('img_CV2_90.jpg', a, [cv2.IMWRITE_JPEG_QUALITY, 90])

我刚刚在windows 7(32位)/Python 2.7.3上安装了最新的OpenCV 2.4,
但我仍然收到与使用beta版时相同的错误:

>>> import cv2
>>> a = cv2.imread(r"DMap.jpg")
>>> a.shape
(1080, 1920, 3)
>>> cv2.imwrite('img_CV2_90.jpg', a, [cv2.IMWRITE_JPEG_QUALITY, 90])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
SystemError: error return without exception set
导入cv2 >>>a=cv2.imread(r“DMap.jpg”) >>>a.形状 (1080, 1920, 3) >>>imwrite('img_cv2_90.jpg',a[cv2.imwrite_JPEG_QUALITY,90]) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 SystemError:返回错误,未设置异常 有什么想法吗?使用元组而不是列表,或者在序列中添加一个尾随的0都没有帮助-同样的错误

谢谢
-Sebastian Haase

这可能是由于从Python到C的
imwrite()
参数的包装错误,
cv2.imwrite\u JPEG\u QUALITY
(类型为“long”),导致了一些奇怪的问题。您应该尝试将此常量转换为“int”类型:


对我来说,它解决了这个问题(python 2.7.2,opencv 2.4.1)

在安装新软件包之前,是否删除了旧软件包的所有痕迹?是的。据我所知,c:/OpenCV2.4目录中只设置了PYTHONPATH和PATH。--设置路径=%PATH%;C:\opencv2.4\build\x86\mingw\bin--也许这就是问题所在。。。。当你导入cv2时,我应该指向vc9还是vc10而不是mingw???然后是cv2.\uuuu文件\uuuu你真的看到它是新版本吗?>>cv2.\uuu文件\uuuuu==>'C:\opencv2.4\build\python\2.7\cv2.pyd',我还尝试将路径变量改为指向C:\opencv2.4\build\x86\vc8\bin----然后是…vc9…--两者都没有变化。这应该作为一个错误归档。我们可以在不写入图像的情况下转换质量吗?我想计算原始图像和转换图像之间的
cv2.absdiff
,数据集包含500000个图像。因此,如果我跳过io部分,效率会更高。@MasoudMasoumiMoghadam可能会尝试
cv2.imencode()
,相反,我猜它的参数与
imwrite
相同,您可以在之后使用
imdecode
,避免使用磁盘并保存一些io。
cv2.imwrite('img_CV2_90.jpg', a, [int(cv2.IMWRITE_JPEG_QUALITY), 90])