如何将 cv2 处理后的图像保存到 django 模型?

Hir*_*uri 5 python django opencv

我使用 opencv 裁剪图像,我想将它们保存到模型中,我将文件直接加载到computeLogoFromMemoryFILE处理位置,从那里如何将图像保存到TempImage模型中?

视图.py:

form = myForm(request.FILES)
if form.is_valid():
    cropped_image = computeLogoFromMemoryFILE(request.FILES.get('logo'))
    # ...
    temp_image = TempImage.objects.create(image=?)
Run Code Online (Sandbox Code Playgroud)

简历2:

# (np == numpy)
def computeLogoFromMemoryFILE(logo):
    logo.seek(0)
    image = cv2.imdecode(np.fromstring(logo.read(), np.uint8), cv2.IMREAD_UNCHANGED)
    cropped_img = crop_image(image)
Run Code Online (Sandbox Code Playgroud)

cropped_image变量是一个 opencv 数组:

array([[ 52, 218, 255],
    [ 52, 218, 255],
    [ 52, 218, 255],
    ...,
    [ 52, 218, 255],
    [ 52, 218, 255],
    [ 52, 218, 255]]...], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)

我应该如何进行?

M.j*_*vid 4

在 Django 中,每当你需要操作上传的文件、类似的图像并将它们设置为模型字段时,你必须使用Django File类,你可以执行类似的代码:

from django.core.files import File

def my_view(request):
    ...
    form = myForm(request.FILES)

    if form.is_valid():
        temp_image = myForm.save(commit=False)
        cropped_image = computeLogoFromMemoryFILE(request.FILES.get('logo'))
        with open('path/of/cropped_image.png', 'rb') as destination_file:
            temp_image.image.save('dest.png', File(destination_file), save=False)
        temp_image.save()
    ...
Run Code Online (Sandbox Code Playgroud)

注意:将文件设置到模型字段后,将此文件克隆到 上MEDIA_ROOT,最好删除旧图像或使用BytesIO而不是使用文件来存储操作的图像。