2016-08-03 66 views
0

我想计算两个图像之间的差异。我只对图像的某个部分的差值感兴趣。为此,我将图像的所需部分复制到临时图像,并对这些图像进行操作。但是,使用http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html上指定的像素分配。这给出,OpenCV Python将图像的某些部分复制到另一个

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

使用相似的逻辑,我写了一个Python程序,

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 

然而,即时得到输出消息:

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 

我在Windows 10上运行Python 2.7与OpenCV 3.1.0。

回答

1

你得到的错误是因为你的命令试图将字符串'carparking2_1.jpg'分割成好像它是图像数据。

#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,:] 
相关问题