【问题标题】:Converting JPG to TIFF using Opencv使用 Opencv 将 JPG 转换为 TIFF
【发布时间】:2019-08-29 09:49:12
【问题描述】:

我想将 jpg 图像转换为 tiff。

我试着用 python 的 opencv 来做。

import cv2
image = cv2.imread("image.jpg")

retval, buf = cv2.imencode(".tiff", image)
cv2.imwrite("out.tiff")

我有这个:
进程以退出代码 136 结束(被信号 8 中断:SIGFPE) 我提到了这个link

但我无法让它工作。 任何帮助将不胜感激。

【问题讨论】:

  • imencode 将为您提供编码为 tiff 的图像的字节(通常您将其直接写入文件或可能通过网络写入另一个应用程序),imwrite 将对其进行编码并将其写入磁盘,在您的代码中,您缺少此函数中的图像参数。

标签: opencv jpeg tiff cv2


【解决方案1】:

对我来说,这个版本没有错误:

import cv2
image = cv2.imread("image.jpg")

cv2.imwrite("out.tiff", image)

为什么需要imencode?使用它为我提供了相同的结果文件,只是创建了一个临时内存缓冲、已经 TIFF 压缩的图像版本:

retval, buf = cv2.imencode(".tiff", image)
with open('out2.tiff', 'wb') as fout:
    fout.write(buf.tostring())

【讨论】:

  • 这会创建一个 tiff 图像,但是当我尝试使用此代码 naip_ndvi = (naip_data[3] - naip_data[0]) / (naip_data[3] + naip_data[0]) 时它不起作用。
  • 我假设您正在做类似于this 的事情。当您尝试进行图像处理时,例如从另一个中减去一个,您不会在压缩图像(imencode 结果)上执行它,而是需要在原始 image 上执行它,它包含一个数组中的所有像素。
  • 另外请注意,要使减法正常工作,请检查 OpenCV 的 cv2.subtract(img1, img2) 或简单的 numpy img1 - img2 是否更适合您,因为它们会给出不同的结果(cv2.add 也存在)。像素数据为 0..255,因此一个图像中的单像素颜色分量 0 减去另一个图像中的 50 在 numpy 中为 206(由于 uint8 将 256 添加到 -50),cv2.subtract 将导致 0('给定像素的黑度饱和)。您可能会在this question 中看到不同的结果。
猜你喜欢
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多