-
-
Save flyboy74/3088832dac862b67addcf1611301fec5 to your computer and use it in GitHub Desktop.
| from picamera.array import PiRGBArray | |
| from picamera import PiCamera | |
| import time | |
| import cv2 | |
| import numpy as np | |
| import RPi.GPIO as GPIO | |
| GPIO.setmode(GPIO.BOARD) | |
| GPIO.setup(40, GPIO.OUT) | |
| GPIO.output(40, GPIO.HIGH) | |
| camera = PiCamera() | |
| camera.resolution = (640, 360) | |
| camera.rotation = 180 | |
| rawCapture = PiRGBArray(camera, size=(640, 360)) | |
| time.sleep(0.1) | |
| x_last = 320 | |
| y_last = 180 | |
| for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): | |
| image = frame.array | |
| Blackline = cv2.inRange(image, (0,0,0), (75,75,75)) | |
| kernel = np.ones((3,3), np.uint8) | |
| Blackline = cv2.erode(Blackline, kernel, iterations=5) | |
| Blackline = cv2.dilate(Blackline, kernel, iterations=9) | |
| img_blk,contours_blk, hierarchy_blk = cv2.findContours(Blackline.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) | |
| contours_blk_len = len(contours_blk) | |
| if contours_blk_len > 0 : | |
| if contours_blk_len == 1 : | |
| blackbox = cv2.minAreaRect(contours_blk[0]) | |
| else: | |
| canditates=[] | |
| off_bottom = 0 | |
| for con_num in range(contours_blk_len): | |
| blackbox = cv2.minAreaRect(contours_blk[con_num]) | |
| (x_min, y_min), (w_min, h_min), ang = blackbox | |
| box = cv2.boxPoints(blackbox) | |
| (x_box,y_box) = box[0] | |
| if y_box > 358 : | |
| off_bottom += 1 | |
| canditates.append((y_box,con_num,x_min,y_min)) | |
| canditates = sorted(canditates) | |
| if off_bottom > 1: | |
| canditates_off_bottom=[] | |
| for con_num in range ((contours_blk_len - off_bottom), contours_blk_len): | |
| (y_highest,con_highest,x_min, y_min) = canditates[con_num] | |
| total_distance = (abs(x_min - x_last)**2 + abs(y_min - y_last)**2)**0.5 | |
| canditates_off_bottom.append((total_distance,con_highest)) | |
| canditates_off_bottom = sorted(canditates_off_bottom) | |
| (total_distance,con_highest) = canditates_off_bottom[0] | |
| blackbox = cv2.minAreaRect(contours_blk[con_highest]) | |
| else: | |
| (y_highest,con_highest,x_min, y_min) = canditates[contours_blk_len-1] | |
| blackbox = cv2.minAreaRect(contours_blk[con_highest]) | |
| (x_min, y_min), (w_min, h_min), ang = blackbox | |
| x_last = x_min | |
| y_last = y_min | |
| if ang < -45 : | |
| ang = 90 + ang | |
| if w_min < h_min and ang > 0: | |
| ang = (90-ang)*-1 | |
| if w_min > h_min and ang < 0: | |
| ang = 90 + ang | |
| setpoint = 320 | |
| error = int(x_min - setpoint) | |
| ang = int(ang) | |
| box = cv2.boxPoints(blackbox) | |
| box = np.int0(box) | |
| cv2.drawContours(image,[box],0,(0,0,255),3) | |
| cv2.putText(image,str(ang),(10, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) | |
| cv2.putText(image,str(error),(10, 320), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2) | |
| cv2.line(image, (int(x_min),200 ), (int(x_min),250 ), (255,0,0),3) | |
| cv2.imshow("orginal with line", image) | |
| rawCapture.truncate(0) | |
| key = cv2.waitKey(1) & 0xFF | |
| if key == ord("q"): | |
| break | |
| GPIO.output(40, GPIO.LOW) |
remove img_blk if using cv2 or 4
Traceback (most recent call last):
(Y_highest, con_highest,x_min,y_min)=candidates[contours_len -1]
IndexError: list index out of range
What to do?
_, contours_blk, _ = cv2.findContours(Blackline.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
Doing this will eliminate the error.
where you defined x_last and y_last
I can't find, can you help me
Hello,
I have an error claiming that contours_blk is out of range.
Error below:
Traceback (most recent call last):
File "Follower_CV_42.py", line 58, in
(y_highest,con_highest,x_min, y_min) = canditates[contours_blk_len-1]
IndexError: list index out of range
Can you please give me a hint for this?
Thanks in advance
Hello,
I have an error claiming that contours_blk is out of range. Error below: Traceback (most recent call last): File "Follower_CV_42.py", line 58, in (y_highest,con_highest,x_min, y_min) = canditates[contours_blk_len-1] IndexError: list index out of range
Can you please give me a hint for this?
Thanks in advance
Please provide the response to this issue
WHEN I RUN THIS CODE TO CHECK HERE COMES
/usr/lib/python2.7/dist-packages/picamera/encoders.py:544: PiCameraResolutionRounded: frame size rounded up from 640x360 to 640x368
width, height, fwidth, fheight)))
Traceback (most recent call last):
File "follower.py", line 29, in
img_blk,contours_blk, hierarchy_blk = cv2.findContours(Blackline.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ValueError: need more than 2 values to unpack
WHAT TO DO FOR THIS?