Как вставить изображение в базу данных sqlite3? - PullRequest
1 голос
/ 08 апреля 2020

Вот часть моего кода:

import sqlite3
import tkinter
import time
import PIL.Image, PIL.ImageTk
from PIL import Image,ImageTk
import cv2
import numpy as np
from tkinter import Tk, Label, Button, Entry, Toplevel

r=Tk()
conn = sqlite3.connect('datastorage.db')
print("Opened database successfully");

def snapshot(self):
             # Get a frame from the video source
            ret, frame = self.vid.get_frame()

Я захватываю кадр из видео и мне нужно вставить его в базу данных, которая содержит текстовый столбец и столбец большого двоичного объекта. Есть и другие подобные вопросы, которые предлагают преобразовать в строку и сохранить, но поскольку у меня уже есть изображения в формате BLOB-объектов, и я извлекаю их, используя декодирование, как показано в коде ниже, мне нужно хранить только BLOB-объекты.

blob_data=row[1]
                nparr  = np.frombuffer(blob_data, np.uint8)
                img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
                image1=cv2.resize(img_np,(260,200))
                #cv2.imshow("data",image1)
                #break
                #Rearrang the color channel
                b,g,r = cv2.split(image1)
                image1 = cv2.merge((r,g,b))
                hsv1=cv2.cvtColor(image1, cv2.COLOR_RGB2HSV)
                kernel2 = np.ones((3,3),np.uint8)

Я попытался использовать следующий запрос:

cursor=conn.execute("create table if not exists user_6 (id text, img blob)")
cursor=conn.execute("insert into user_6 values (?,?)",(ins,sqlite3.Binary(frame)))

, но я не могу отобразить его, используя тот же метод, который использовался для отображения всех других записей. Код, используемый для отображения, является вторым блоком кода. Я сталкиваюсь с ошибкой, как показано:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\ABC\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:\Users\ABC\Desktop\Python tut\gui databse.py", line 71, in display
    image1=cv2.resize(img_np,(130,100))
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:4045: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 08 апреля 2020

Я смог сделать это, используя следующий код:

img_str = cv2.imencode('.jpg', frame)[1].tostring()
cursor=conn.execute("create table if not exists user_6 (id text, img blob)")
cursor=conn.execute("insert into user_6 values (?,?)",(ins,img_str))
conn.commit()

Хотя цвета на изображении отличаются от захваченного изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...