如何使用opencv和mrjob从hadoop序列文件中读取图像?

6ss1mwsb  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(239)

我用tar-to-seq.jar从充满图像的tar文件创建了序列文件。现在我想从该序列文件中创建以字节为单位的图像并对其进行分析。我使用opencv3.0.0和mrjob0.5版本。
我在使用cv2.imdecode()方法读取图像时遇到了问题,我得到了空值

from mrjob.job import MRJob
import os
import sys
import cv2
import numpy as np
class CountLavander(MRJob):
    HADOOP_INPUT_FORMAT = 'org.apache.hadoop.mapred.SequenceFileAsTextInputFormat'
    def mapper(self, key, value):
        imgbytes = np.fromstring(value,dtype='uint8')
        imarr = cv2.imdecode(imgbytes, cv2.IMREAD_COLOR)
        yield imarr,1

    def reducer(self, key, values):
        yield key, sum(values)

if __name__ == '__main__':
    CountLavander.run()

运行此操作的结果是:

python count_lavander.py -r hadoop --hadoop-bin /usr/bin/hadoop
     --hadoop-streaming-jar /usr/hdp/2.2.8.0-3150/hadoop-mapreduce/hadoop-
streaming-2.6.0.2.2.8.0-3150.jar 
    --interpreter /usr/local/bin/python2.7 cor_data.seq

我得到:

null   2731

我在序列文件中打包了2731个图像,所以我猜它打包得很好,但不知怎么的,我不能把它们当作图像来读。有人知道吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题