Привет, мне было интересно, возможно ли это вообще, поскольку я попробовал, но моя переменная всегда была пустой. В моем проекте я отслеживаю статический объект и лазерную указку через PiCamera на моем малине pi, и я вычисляю центроиды их контуров как (smallx,smally)
и (small2x,small2y)
соответственно.Невозможно назначить значение переменной python
Я использую разницу между их координатами, чтобы увидеть, должен ли указатель идти вверх, вниз, влево или вправо, чтобы встретить 1-й статический объект. После этого он выберет направление между 1 и 4, чтобы двигаться, потому что мои элементы управления не идеально расположены на оси x-y и наклонены.
Я оставил элементы управления и контур, узнав отсюда, и сократил свой общий код только для того, чтобы вас не встретили гигантскую кучу провалов, чтобы разобраться.
EDIT: Я не думаю, что с моим пониманием я мог бы обеспечить что-то runnable, не отправляя несколько сотен строк и мое маленькое устройство, но я закипи его и отправлю точную часть моего кода, где это актуально , Запуск Python 2.7.3, используя opencv2.4.10
Код:
#import libraries like picamera and opencv
#set empty variables like:
up = down = left = right = set()
smallx = smally = small2x = small2y = 0
#etc etc
with picamera.PiCamera() as camera:
with picamera.array.PiRGBArray(camera) as rawCapture:
#Calibrate my controls with the camera. updates the up, down, left, and right sets.
with picamera.PiCamera() as camera:
with picamera.array.PiRGBArray(camera) as rawCapture:
# Take pictures, threshold them, find contours, append their arrays to list
if len(cnts)>0: #If any objects were identified
contm = sorted(smalList, key=lambda tup: tup[1])
smallest = cnts[smalList[0][0]] #**Take smallest object(my static object)**
smallM = cv2.moments(smallest)
smallx = int(smallM['m10']/smallM['m00']) #**Calculate xcoord**
smally = int(smallM['m01']/smallM['m00']) #**Calculate ycoord**
cv2.line(frame, (smallx,smally), (smallx,smally), 1, 8,0) #Draws centroid
# print(len(cnts))
if len(cnts)==2: #If only 2 objects were identified
smallester = cnts[smalList[1][0]] #** Take pointer object **
small2 = cv2.moments(smallester)
small2x = int(small2['m10']/small2['m00']) #**Calculate xcoord**
small2y = int(small2['m01']/small2['m00']) #**Calculate ycoord**
x = small2x - smallx
y = small2y - smally
print x #These prints return a value
print y
if x < 0: #Difference = Pointer - Object
s1 = right
if x >0:
s1 = left
if y < 0:
s2 = down
if y >0:
s2 = up
print s1, s2 #set([]),set([])
print up,down,left,right #set([1,2]),set([3,4]),set([1,4]),set([2,3])
selecty = s1&s2 #set([])
#Tell the pointer where to go
Должен ли я быть даже с помощью наборов?
Если 's1' и' s2' всегда остаются '0', то ни одно из ваших условий' if' не оценивает true-y. Из того, что вы опубликовали, мы не можем сказать вам, почему. Но, конечно, можно назначить набор, * он достигает этих строк *. – jonrsharpe
'small2x, smallx = 5,3' –
' set (1, 2) '' 'TypeError'. Вы имели в виду 'set ([1, 2])' или '{1, 2}' вместо этого? –