Une connaissance a dit que j'avais besoin d'un programme pour comparer les différences entre les images, alors je l'ai construit avec Python et OpenCV. Le but est de rechercher les erreurs en utilisant OpenCV, mais ** la condition est qu'il n'y ait pas de divergence entre les images **, donc cela peut ne pas convenir à des fins pratiques. Si vous avez besoin d'une recherche d'erreurs plus robuste, vous pouvez vous référer à cet article. Je pense que la mise en œuvre est environ 10 fois plus légère que la méthode de cet article ...
L'image suivante est sortie.
(L'image est Wikipedia Plus cité)
import cv2
import matplotlib.pyplot as plt
img1 = cv2.imread('img1.png')
img1 = cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
img1 = img1/255
img2 = cv2.imread('img2.png')
img2 = cv2.cvtColor(img2,cv2.COLOR_BGR2RGB)
img2 = img2/255
dif = cv2.absdiff(img1,img2)
dif[dif>0] = 1
fig,axs = plt.subplots(2,2)
ar = axs.ravel()
ar[0].imshow(img1)
ar[1].imshow(img2)
ar[2].imshow(img1*dif*0.8 + img1*0.2)
ar[3].imshow(img2*dif*0.8 + img2*0.2)
plt.show()
Le traitement essentiel n'est que de quelques lignes par OpenCV, mais le prétraitement pour l'affichage avec matplotlib prend pas mal de lignes. Le fait est que vous pouvez obtenir une image de différence avec cv2.absdiff
, donc je l'utilise comme masque. Si diff est laissé tel quel, la différence est prise pour chaque canal RVB, elle est donc masquée par l'opération dif [dif> 0] = 1
.
Le point qui a pris plus de temps que ce à quoi je m'attendais est que les données d'image d'OpenCV peuvent être prises à la fois en type «int» et en type «float», ce qui est généralement pratique, mais cette fois, le masque n'a pas bien fonctionné. En conséquence, lorsque l'image est lue, elle est «/ 255» et convertie de force en «float».
Recommended Posts