【发布时间】:2019-11-01 01:06:08
【问题描述】:
我想使用 Python 比较两个图像,但我不熟悉这种语言。
我有两张相同大小的图片。我必须创建一个包含两个图像的逐像素差异的数组。最后,我要计算数组所有值之和的平均值,作为浮点数。
我可以使用 Processing 来做到这一点,但我不能使用 Python 来做到这一点。
如果两个图像相同,则结果显然是 0。
我想把这段代码翻译成Python(最重要的是最终平均值的值)。
PImage img,img2;
int threshold = 64;
void setup(){
//size(600,400);
img = loadImage(args[0]);
img2 = loadImage(args[1]);
println(comparison(img,img2));
exit();
}
PImage binarization(PImage img,int threshold){
for(int i = 0; i < img.pixels.length; i++){
if(green(img1.pixels[i]) > threshold) img.pixels[i] = color(255);
else img.pixels[i] = color(0);
}
return img;
}
float comparison(PImage img, PImage img2){
img.filter(GRAY);
img2.filter(GRAY);
img = binarazation(img,threshold);
img2 = binarization(img2,threshold);
int array[] = new int[img.pixels.length];
for(int i = 0; i < img.pixels.length; i++){
array[i] = int( abs(green(img.pixels[i]) - green(img2.pixels[i])));
}
float average = 0;
for(int i = 0; i < img.pixels.length; i++){
average+= array[i];
}
average = average/img.pixels.length;
return average;
}
编辑::::
非常感谢!
我之前贴的比较函数不太对
它实际上应该出现一个图像(在它被转换为灰度之后)和另一个图像(已经应用了 canny 算法)
如何修改 elgordorafiki 发布的比较功能?
使用的精明算法是这样的:
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread ('img', 0)
edges = cv2.Canny (img, 100,110)
plt.subplot (2,1,1), plt.imshow (img, cmap = 'gray')
plt.title ('Original Image'), plt.xticks ([]), plt.yticks ([])
plt.subplot (2,1,2), plt.imshow (edges, cmap = 'gray')
plt.title ('Canny Edge Detection'), plt.xticks ([]), plt.yticks ([])
plt.show ()
【问题讨论】:
-
那是什么语言?
-
If the two images are equal I will obviously get 1 as a value你不应该得到 0 吗?每个像素的差为0,所以总和和它的平均值也应该是0。 -
我贴的代码是在处理过程中写的我应该在python中做同样的事情
-
是的,我已经纠正了错误
-
您可以使用 Python 图像库 (PIL) 的 Pillow 端口在 Python 3.x 中执行类似的图像处理任务。这是它的online documentation。它将允许您编写 Python 代码来执行此操作。如果您在使其正常工作时遇到问题,请发布另一个问题。
标签: java python processing