![](/img/trans.png)
[英]Android OpenCV imread flags fatal exception, imread works fine with no flags, pixel output doesn't match MATLAB
[英]OpenCV imread doesn't work
我在我的C ++代碼中循環打開並處理一組圖像。 其中之一就是 http://i.stack.imgur.com/rUJnp.gif
imread
無法打開這個特定的。 imread().data
為NULL
。
FWIW,我在CentOS
使用最新的opencv 2.4.8。 有沒有什么辦法解決這一問題? 如果不是最簡單的方法是用另一個C ++圖像庫打開它並將其轉換為cv::Mat
?
從關於imread
OpenCV文檔
函數imread
從指定文件加載圖像並返回它。 如果無法讀取圖像(由於文件丟失,權限不正確,格式不受支持或無效),該函數返回一個空矩陣( Mat::data==NULL
)。 目前,支持以下文件格式:
Windows bitmaps - *.bmp, *.dib (always supported)
JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section)
JPEG 2000 files - *.jp2 (see the Notes section)
Portable Network Graphics - *.png (see the Notes section)
Portable image format - *.pbm, *.pgm, *.ppm (always supported)
Sun rasters - *.sr, *.ras (always supported)
TIFF files - *.tiff, *.tif (see the Notes section)
因此OpenCV不支持.gif
格式,因此imread
返回NULL
。
據我所知,OpenCV不支持gif格式,要直接在程序中讀取,需要一些外部庫。 例如http://freeimage.sourceforge.net/ 。
祝好運
正如其他人所說, cv2.imread
不允許您閱讀GIF。 但是,您可以使用cv2.VideoCapture
來讀取GIF。 例如(在Python中):
def read_video(video_path):
video = cv2.VideoCapture(str(video_path))
while video.isOpened():
ok, frame = video.read()
if not ok:
break
yield frame
video.release()
# yes, it works with the URL (wow!)
plane_seats = list(read_video('https://i.stack.imgur.com/rUJnp.gif'))[0]
animated_gif = list(read_video('https://i.stack.imgur.com/rUJnp.gif'))
將其轉換為C ++應該是微不足道的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.