|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 曼查克 于 2020-7-1 15:37 编辑
代码如下:
import os
import cv2
import numpy as ny
os.chdir(r"D:\test")
img1 = cv2.imread(r"D:\test\581_4_Q204@3_side.jpeg")
img2 = cv2.imread(r"D:\test\581_4_Q204@3_side(2).jpeg")
print(img1.shape,img2.shape)
img3 = cv2.subtract(img1,img2)
if ny.any(img3) is not True:
print(img3.shape)
这样可以正常运行,结果如下:
=============== RESTART: C:\Users\Administrator\Desktop\ig (2).py ==============
(640, 587, 3) (640, 587, 3)
(640, 587, 3)
>>>
但是如果把if条件改成这样:
import os
import cv2
import numpy as ny
os.chdir(r"D:\test")
img1 = cv2.imread(r"D:\test\581_4_Q204@3_side.jpeg")
img2 = cv2.imread(r"D:\test\581_4_Q204@3_side(2).jpeg")
print(img1.shape,img2.shape)
img3 = cv2.subtract(img1,img2)
if ny.any(img3) is False:
print(img3.shape)
结果就不是想要的了,如下:
=============== RESTART: C:\Users\Administrator\Desktop\ig (2).py ==============
(640, 587, 3) (640, 587, 3)
>>>
求大佬解答
本帖最后由 hrp 于 2020-7-1 17:54 编辑
你对is的用法理解有偏差,首先is和is not是对对象“身份”的判断,而不是进行“真/假”的判断。其次你第一段代码应该理解为(is not) True,而不是is (not True)。
综上所述,问题点就很明显了。
第一段代码中:无论ny.any(img3)是空或者非空,它的身份就是ny.any(img3),它不叫True也不叫False,所以if ny.any(img3) is not(身份不是) True,条件是成立的(误打误撞),顺利执行(ny.any(img3)是空的也会执行,仍然有问题)。
我猜测你应该是想判断ny.any(img3)非空时打印结果,py中进行条件判断时非空会被认为判断结果是True(不是身份判断),所以可以这样写:if ny.any(img3): print()。
相反,想判断ny.any(img3)是空则执行,可以这样写:if not ny.any(img3): print('empty')
|
|