Created
March 16, 2017 14:21
-
-
Save ttaqinmu/e45e1f2c6d8661752ce47c4e318ddd8c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
program ini berasumsi bahwa pengendalian kapal (belok kanan,kiri dan lurus) diatur oleh program yg berbeda(mikrokontroler) | |
lalu program ini akan memberikan trigger melalui inputan serial | |
''' | |
import cv2 #import OpenCV | |
import numpy as np #import Numpy | |
import serial | |
ser = serial.Serial( #inisialisasi serial port | |
port='\\\\.\\COM4', | |
baudrate=115200, | |
parity=serial.PARITY_ODD, | |
stopbits=serial.STOPBITS_ONE, | |
bytesize=serial.EIGHTBITS | |
) | |
ser.open() | |
cap = cv2.VideoCapture(0) #meng-capture video dari webcam/sensor kamera | |
while(1): | |
_, frame = cap.read() #membuat frame dari video yang telah di capture | |
height = frame.shape[0] #hitung tinggi gambar | |
width = frame.shape[1] #hitung lebar gambar | |
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) #mengganti frame dari BGR(Blue,Green,Red) menjadi HSV(Hue,Saturation,Value) | |
lower_red = np.array([0,50,50], dtype=np.uint8) #inisialisasi kode warna merah dalam bentuk BGR | |
upper_red = np.array([10,255,255], dtype=np.uint8) #inisialisasi kode warna merah dalam bentuk BGR | |
lower_green = np.array([50,100,100], dtype=np.uint8) #inisialisasi kode warna hijau dalam bentuk BGR | |
upper_green = np.array([70,255,255], dtype=np.uint8) #inisialisasi kode warna hijau dalam bentuk BGR | |
hijau = cv2.inRange(hsv, lower_green, upper_green) #filter frame HSV sesuai warna hijau | |
merah = cv2.inRange(hsv, lower_red, upper_red) #filter frame HSV sesuai warna merah | |
hasil_hijau = cv2.bitwise_and(frame,frame, mask = hijau) #membuat mask dari warna hijau | |
hasil_merah = cv2.bitwise_and(frame,frame, mask = merah) #membuat mask dari warna merah | |
hasil_dual = cv2.bitwise_or(hasil_hijau,hasil_merah) #membuat gambar baru hanya berwarna hijau dan merah | |
img = cv2.cvtColor(hasil_dual, cv2.COLOR_BGR2HSV) #convert ke HSV | |
count_red=0 | |
count_green=0 | |
for y in range (height): #counting perpixel | |
for x in range (width): | |
color = np.array(img[y,x],dtype=np.uint8) | |
if(color.all() >= lower_green.all()): #deteksi pixel berwarna hijau | |
if(color.all() <= upper_green.all()): | |
count_green =count_green +1 | |
elif(color.all() >= lower_red.all()): #deteksi pixel berwarna merah | |
if(color.all() <= upper_red.all()): | |
count_red = count_red + 1 | |
if(count_red > count_green): #pengendalian hasil akhir untuk membelokan perahu/boat | |
ser.write("1".encode()) #trigger untuk serial | |
elif(count_red < count_green): | |
ser.write("2".encode()) #trigger untuk serial |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment