Python opencv:显示来自sqlite3的图像

Python opencv:显示来自sqlite3的图像,python,opencv,image-processing,node-sqlite3,Python,Opencv,Image Processing,Node Sqlite3,我想用我保存在数据库blob类型中的opencv进行imshow 我试着这样做: import numpy as np def check(self): self.create_database("resimler.db") sorgu="select RESİM from resimler where ID=?" ıd=3 self.cursor.execute(sorgu,(ıd,)) blob_data=self.cursor.fetchone()

我想用我保存在数据库blob类型中的opencv进行imshow

我试着这样做:

import numpy as np

def check(self):
    self.create_database("resimler.db")
    sorgu="select RESİM from resimler where ID=?"
    ıd=3
    self.cursor.execute(sorgu,(ıd,))
    blob_data=self.cursor.fetchone()[0]
    nparr  = np.fromstring(blob_data, np.uint8)
    img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    image=cv2.resize(img_np,(130,100))
    cv2.imshow("data",image)
我得到这个错误 错误:-215函数cv::resize中的ssize.width>0&&ssize.height>0

我是这样说的

def kaydet(self,resim,ad):     
sorgu="insert into resimler (RESİM,AD) values (?,?)"
self.cursor.execute(sorgu,[sqlite3.Binary(resim),ad])
self.baglantı.commit()
图片,我从opencv的视频捕获中得到,就是这样

        while True:
        (_, im) = self.cap.read() 
        gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 
        faces = face_cascade.detectMultiScale(gray, 1.3, 4) 
        for (x, y, w, h) in faces: 
        cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2) 
        face = gray[y:y + h, x:x + w] 
        face_resize = cv2.resize(face, (width, height))
        cv2.imshow("img",face_resize)
        resimler.append(face_resize)

        cv2.imshow('OpenCV', im)
        sayıcı+=1

        if cv2.waitKey(1) == ord('q'):
        cv2.destroyAllWindows()
        self.show_frame()
        self.main()
        break
        if sayıcı%100==0:
        resim=resimler[len(resimler)//2]
        cv2.imshow("resim",resim)
        self.create_database("resimler.db")
        self.kaydet(resim,"resim")
        self.kapat()
        print("kaydedildi")
        self.main()
        break

我不容易理解您的代码,因为缺少太多的部分,而且格式/缩进不好,但我可以尝试帮助您

从数据库读回数据时,您似乎正在调用cv2.imdecode。该函数需要一个JPEG或PNG编码的图像,其开头类似于JPEG ff d8或PNG文件89 50,并具有正确的签名:

对于JPEG:

ffd8 ffe0 0010 4a46 4946 0001 0100 0001  ......JFIF......
巴布亚新几内亚:

8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
当您将图像存储在数据库中时,您似乎正在保存一个Numpy数组——尽管我不确定。但是如果你把它传给cv2.imdecode,它就不起作用了

因此,您需要:

将JPG/PNG存储在较小但精度较低的数据库中,并使用cv2.imencode写入,使用cv2.imdecode读取

或者将Numpy数组存储在数据库中,而不是对其进行解码


但有一点是肯定的,你不能混合使用。

鉴于你没有向我们展示你最初是如何将数据保存在数据库中的,因此很难告诉你哪里出了问题。提供一个。也许您可以显示blob_数据的前几个字节。正如Dan所说,请首先说明如何将数据放入数据库。谢谢。请显示从磁盘或任何地方读取图像的代码,然后将其写入数据库。您可能已经编写了JPEG或PNG,或base64编码的JPEG或PNG,或Numpy字节数组,或base64编码的Numpy数组,或原始RGB值或pickled Numpy数组-谁知道呢?