2016-02-15 43 views
0
import cv2 
import numpy as np 
boxes = [] 
d={} 
global a 
def on_mouse(event, x, y, flags, params): 
    if event == cv2.EVENT_LBUTTONDOWN: 
     print 'Mouse Position: '+str(x)+', '+str(y) 
     sbox = [x, y] 
     boxes.append(sbox) 
     for a in range(1,4): 
      d["string{0}".format(a)]=x,y 
img = cv2.imread('SAM15.jpg',0) 
img = cv2.resize(img, None, fx = 1,fy = 1) 
cv2.namedWindow('real image') 
cv2.setMouseCallback('real image', on_mouse, 0) 
cv2.imshow('real image', img) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

我的目標是分配和打印三個點,我將連續點擊圖像。我面臨的問題是,我只能打印圖像上的第三個(最終)點擊點。我被困在循環中。請幫助我。提前致謝 !使用python分配和打印循環中的值到不同的變量

輸出應該是這樣的 { '字符串1':(87,26), '字符串2':(84,78), 'STRING3':(42,62)}

回答

0

現在,你每次單擊鼠標按鈕時,循環顯示a的值。相反,您需要測試以確定boxes中是否有三個元素,並且只有在執行for循環時纔會執行。

+0

如何測試三個元素的框?我沒有得到你@SSteve – Sugantharaja

+0

現在我能夠訪問。我在盒子裏有三個元素。運行後,我可以打印個人信息。但是,我嘗試在程序本身中打印像[0]這樣的元素。它顯示像 - IndexError:列表索引超出範圍。@ SSteve – Sugantharaja

+0

這聽起來像你需要做一些基本的調試。在嘗試訪問一個元素之前總是檢查數組的長度(或者只訪問由數組長度控制的循環中的元素)。如果您的數組不爲空,那麼您需要跟蹤代碼,在必要時添加調試語句,以查看數組值的變化。 – SSteve