Я пытаюсь применить метод numpy palette к обработанному opencv видео (ссылки: this question и this tutorial). Я нацелен на замену всех пикселей кадра определенного диапазона цветов другим. Ниже приведен код, который заменяет черный цвет зеленым. Unfotunately, мой код выдает ошибку на линии:Метод палитры с использованием numpy
image[np.where((image==[0,0,0]).all(axis=2))]=green
ошибки: exceptions.ValueError: ось (= 2) из границ
Я бег питона 2.7 с PyScripter, и я нахожу это странным, потому что код действительно работал раньше, и я не делал никаких серьезных изменений. Может кто-нибудь, пожалуйста, помогите мне? Я совсем застрял на этом ...
Мой код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
##IMPORTS
import cv2.cv as cv
import numpy as np
import time
##VARIABLES
#colors
green=[0,255,0]
##MAIN
#video file input
frames = raw_input('Please input video file:')
if not frames:
print "This program requires a file as input!"
sys.exit(1)
#create window
cv.NamedWindow("image", 1)
#File capture
vidFile = cv.CaptureFromFile(frames)
nFrames = int( cv.GetCaptureProperty(vidFile, cv.CV_CAP_PROP_FRAME_COUNT))
fps = cv.GetCaptureProperty(vidFile, cv.CV_CAP_PROP_FPS)
waitPerFrameInMillisec = int(1/fps * 1000/1)
#time adjustment, frame capture
for f in xrange(nFrames):
frame = cv.QueryFrame(vidFile)
# create the images we need
image = cv.CreateImage (cv.GetSize (frame), 8, 3)
# copy the frame, so we can draw on it
if not frame:
break
else:
cv.Copy (frame, image)
#get pixel HSV colors
rows,cols=cv.GetSize(frame)
image=np.asarray(image)
image[np.where((image==[0,0,0]).all(axis=2))]=green
image=cv.fromarray(image)
#show the image
cv.ShowImage("image", image)
#quit command ESC
if cv.WaitKey(waitPerFrameInMillisec)==27:
break
else:
cv.WaitKey(waitPerFrameInMillisec) % 0x100
Казалось бы, ваше изображение имеет размеры менее 3. Добавьте строку 'print image.shape' перед строкой, поднимающей ошибку. Я не уверен в cv, но я знаю, что при преобразовании изображений в массивы numpy с PIL возврат является массивом 1D. Возможно, вам потребуется заменить текущую строку на «image = np.asarray (image) .reshape (rows, cols, -1)». – Jaime