2016-03-02 65 views
0

我想比較一個圖像與另一個文件的所有圖像,獲取差異百分比和打印文件名的最小差異百分比....如果我嘗試追加輸出差異列表...我得到一個錯誤說「浮點值不能重複」 ......這是我迄今所做....如何將浮點數附加到Python中的列表中

from itertools import izip 
import os 
import numpy as np 
import cv2 
from matplotlib import pyplot as plt 
from PIL import Image 
import math 
res = 0 
def take_and_save_picture(im_save): 
    '''Take a picture and save it 

    Args: 
    im_save: filepath where the image should be stored 
    ''' 
    camera_port = 0 
    ramp_frames = 30 
    cap = cv2.VideoCapture(camera_port) 
    def get_image(): 
    retval, im = cap.read() 
    return im 

    for i in xrange(ramp_frames): 
    temp = get_image() 

    print("Taking image...") 
    # Take the actual image we want to keep 
    camera_capture = get_image() 

    #im_save_tmp = im_save + '.jpg' 
    im_save_tmp = im_save 

    # A nice feature of the imwrite method is that it will automatically choose the 
    # correct format based on the file extension you provide. Convenient! 
    cv2.imwrite(im_save_tmp, camera_capture) 

    # You'll want to release the camera, otherwise you won't be able to create a new 
    # capture object until your script exits 
    # del(cap) 

    img1 = cv2.imread(im_save_tmp, 0) 

    edges = cv2.Canny(img1, 100, 200) 
    cv2.imwrite(im_save, edges) 
    cv2.waitKey(0) 
    cv2.destroyAllWindows() 


def re(path1,path2): 



    #path1 = raw_input("Enter the path1:") 
    #path2 = raw_input("Enter the path2:") 
i2= Image.open(path2) 
listing = os.listdir(path1)  
for file in listing: 
    i1 = Image.open(path1 + file)  
    assert i1.mode == i2.mode, "Different kinds of images." 
    assert i1.size == i2.size, "Different sizes." 

    pairs = izip(i1.getdata(), i2.getdata()) 
    if len(i1.getbands()) == 1: 
    # for gray-scale jpegs 
    dif = sum(abs(p1-p2) for p1,p2 in pairs) 
    else: 
    dif = sum(abs(c1-c2) for p1,p2 in pairs for c1,c2 in zip(p1,p2)) 

    ncomponents = i1.size[0] * i1.size[1] * 3 
    res = (dif/255.0 * 100)/ncomponents 
    print "Difference (percentage):", res 


def main(): 
    capture_img = "/Users/Me/Documents/python programs/New/pro.png" 
    #img_to_compare = "/Users/Me/Documents/python programs/compare/img2.jpg" 
    take_and_save_picture(capture_img) 
    path1 = "/Users/Me/Documents/python programs/New/numbers1/"  
    path2 = "/Users/Me/Documents/python programs/New/pro.png" 
    re(path1,path2) 

if __name__ == '__main__': 
    main() 

輸出的區別

Difference (percentage): 2.52484809028 
Difference (percentage): 2.64822048611 
Difference (percentage): 2.64822048611 
Difference (percentage): 3.55436197917 

我在「res」中獲得的值必須存儲在列表中,並且應該找到最小值並且pri nted ....請給我一些代碼...全新的python ...謝謝你...

+4

有太多不相關的代碼在這裏。請顯示您遇到問題的具體位。 –

+0

@DanielRoseman ...我沒有在這段代碼中的任何問題...我只需要知道如何將浮點數添加到Python中的列表/數組,因爲它一直說float不能迭代 – rohini

回答

0

像這樣的東西?

def re(path1,path2): 
    #path1 = raw_input("Enter the path1:") 
    #path2 = raw_input("Enter the path2:") 
    i2= Image.open(path2) 
    listing = os.listdir(path1) 
    res = [] 
    for file in listing: 
     i1 = Image.open(path1 + file)  
     assert i1.mode == i2.mode, "Different kinds of images." 
     assert i1.size == i2.size, "Different sizes." 

     pairs = izip(i1.getdata(), i2.getdata()) 
     if len(i1.getbands()) == 1: 
      # for gray-scale jpegs 
      dif = sum(abs(p1-p2) for p1,p2 in pairs) 
     else: 
      dif = sum(abs(c1-c2) for p1,p2 in pairs for c1,c2 in zip(p1,p2)) 

     ncomponents = i1.size[0] * i1.size[1] * 3 
     res.append((dif/255.0 * 100)/ncomponents) 
     print "Difference (percentage):", res 
    minimum = min(res) # Find minimum value in res 
    print(minimum) 
+1

你剛剛做了他們的家庭作業! – OriginalCliche

+0

@OriginalCliche哦,男人,我因此而陷入低潮? – primoz

+0

@Primoz ...非常感謝你這個代碼完美地工作... – rohini

1

你的代碼必須是這樣的:

####### 
list_dif = [] 

def re(path1,path2): 
    #path1 = raw_input("Enter the path1:") 
    #path2 = raw_input("Enter the path2:") 
    i2= Image.open(path2) 
    listing = os.listdir(path1)  
    for file in listing: 
     i1 = Image.open(path1 + file)  
     assert i1.mode == i2.mode, "Different kinds of images." 
     assert i1.size == i2.size, "Different sizes." 

     pairs = izip(i1.getdata(), i2.getdata()) 
     if len(i1.getbands()) == 1: 
      # for gray-scale jpegs 
      dif = sum(abs(p1-p2) for p1,p2 in pairs) 
     else: 
      dif = sum(abs(c1-c2) for p1,p2 in pairs for c1,c2 in zip(p1,p2)) 

     ncomponents = i1.size[0] * i1.size[1] * 3 

     ####### 
     for n in range(ncomponents): 
      res = (dif/255.0 * 100)/(ncomponents + 1) 
      list_dif.append(res) 

     print "Difference (percentage):", list_dif 
+0

非常感謝你..它的作品,但它進入無盡的循環...我想我可以修復... – rohini

+0

不客氣! –