我试着跟踪下一张照片和前一张有多大的不同,假设场景中有一些移动。决定在两个jpg图像之间应用相应像素值的减法,然后计算所得矩阵的平均值,以检查其是否低于或低于某个阈值水平(供进一步分析)。
减法采用cv2减法和np减法。我注意到结果有很大的不同。看起来numpy以某种方式扩展了直方图和标准化的结果值,但是为什么呢?
图像通过cv2.open加载。我知道这种方法使用BGR顺序的通道,但它不能解释发生了什么。加载的图像是具有np.uint值的numpy nd.array。使用Python 3.7开发Spyder。
Edit:cv2.imread中的参数0告诉以灰度加载图像
#loading images
img_cam0 = cv2.imread(r'C:\Users\Krzysztof\Desktop\1.jpg',0)
img_cam1 = cv2.imread(r'C:\Users\Krzysztof\Desktop\2.jpg', 0)
print('img0 type:',type(img_cam0), 'and shape:', img_cam0.shape)
print('img1 type:',type(img_cam1),'and shape:', np.shape(img_cam1))
print('\n')
#opencv subtraction
cv2_subt = cv2.subtract(img_cam0,img_cam1)
cv2_mean = cv2.mean(cv2_subt)
print('open cv mean is:', cv2_mean)
f.show_im(cv2_subt, 'cv2_subtr')
#np subtraction and mean
np_subtr = np.subtract(img_cam0, img_cam1)
np_mean = np.mean(np_subtr)
print('numpy mean is:', np_mean)
f.show_im(np_subtr, 'np_subtr')
区别很简单——饱和和不饱和。
^{} 执行饱和。根据文件:
^{} 只执行常规减法,因此结果受integer overflow(即值环绕)约束。
示例
相关问题 更多 >
编程相关推荐