Ich möchte eine benutzerdefinierte Farbe Look-up-Tabelle (LUT) auf ein Bild anwenden.Bewerben openCV Look Up Table (LUT) auf ein Bild
Ich habe über die openCV
LUT Api geschaut, aber ich kann nicht scheinen, es richtig zu machen.
#!/bin/bash
# -*- coding: utf-8 -*-
import os
import numpy as np
import cv2
b_max = 230
g_max = 220
r_max = 250
identity = np.arange(256, dtype = np.dtype('uint8'))
b_channel = np.arange(b_max, dtype = np.dtype('uint8'))
b_channel = np.append(b_channel, (256-b_max)*[b_max])
g_channel = np.arange(g_max, dtype = np.dtype('uint8'))
g_channel = np.append(g_channel, (256-g_max)*[g_max])
r_channel = np.arange(r_max, dtype = np.dtype('uint8'))
r_channel = np.append(r_channel, (256-r_max)*[r_max])
if 256 != b_channel.size or 256 != g_channel.size or 256 != r_channel.size:
print "size of arrays don't match!"
lut = np.dstack((identity, identity, b_channel, g_channel, r_channel))
# Load the image
img = cv2.imread('input.jpg',cv2.IMREAD_COLOR)
dstImage = cv2.LUT(img, lut)
cv2.imwrite('output.jpg', dstImage)
bekomme ich folgende Fehlermeldung:
OpenCV Error: Assertion failed ((lutcn == cn || lutcn == 1) && _lut.total() == 256 && _lut.isContinuous() && (depth == CV_8U || depth == CV_8S)) in cv::LUT, file C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\core\src\convert.cpp, line 5690
Traceback (most recent call last):
File "ApplyCLUT.py", line 33, in <module>
dstImage = cv2.LUT(img, lut)
cv2.error: C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\core\src\convert.cpp:5690: error: (-215) (lutcn == cn || lutcn == 1) && _lut.total() == 256 && _lut.isContinuous() && (depth == CV_8U || depth == CV_8S) in function cv::LUT
EDIT: Änderung dieser Zeile:
lut = np.dstack((b_channel, g_channel, r_channel))
und es wird funktionieren!
"lut ist kein numpliges Array" - machen Sie es vielleicht zu einem numpligen Array? Wie in 'np.array (....)' –