2016-08-03 19 views
0

Ich möchte den Unterschied zwischen zwei Bildern berechnen. Ich interessiere mich nur für den Unterschiedswert für eine bestimmte Bildportion. Dafür kopiere ich den benötigten Teil des Bildes in ein temporäres Bild und arbeite an diesen Bildern. Verwenden Sie jedoch die Pixelzuweisung, die wie unter http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html angegeben verwendet wird. Hier ist es gegeben,OpenCV Python Kopieren bestimmter Teil des Bildes zu einem anderen

ball = img[280:340, 330:390] img[273:333, 100:160] = ball

Unter Verwendung der ähnlichen Logik, die ich geschrieben habe ein Python-Programm,

import cv2 
import numpy as np 

img_file = 'carparking2_1.jpg' 
img = cv2.imread(img_file, cv2.IMREAD_COLOR) 
img_withoutcar = 'carparking2_1.jpg' 
img_withcar = 'carparking2.jpg' 

img1 = img_withoutcar[47:151, 106:157] 
img2 = img_withcar[47:151, 106:157] 

diff1 = cv2.absdiff(img1, img2) 
diff2 = cv2.absdiff(img1, img1) 

print 'RGB shape: ', img.shape  # Rows, cols, channels 
print 'Difference with car and without: ', diff1 
print 'Difference with car and with car: ', diff2 

jedoch im die Ausgangsmeldung zu erhalten:

File "D:/Projects/IoT Smart Parking/differenceinframes.py", line 8, in <module> 
    img1 = img_withoutcar[47:151, 106:157] 
TypeError: string indices must be integers, not tuple 

Ich bin Ausführen von Python 2.7 mit OpenCV 3.1.0 unter Windows 10.

Antwort

1

Sie erhalten den Fehler, weil Ihr Befehl versucht, die Zeichenfolge "carparking2_1.jpg" zu zerlegen, als wären es die Bilddaten.

#First assign the file names: 
file_name_without_car='carparking2_1.jpg' 
file_name_with_car='carparking2.jpg' 

#load the images 
img_withoutcar= cv2.imread(file_name_without_car, cv2.IMREAD_COLOR) 
img_withcar= cv2.imread(file_name_with_car, cv2.IMREAD_COLOR) 

#now you can slice regions of the images 
#note that color images have a third dimension for color channel. 
img1 = img_withoutcar[47:151, 106:157,:] 
img2 = img_withcar[47:151, 106:157,:]