تشخیص رنگ با استفاده از OpenCV و Python
در این پست قصد دارم با استفاده از OpenCV 3.0 و محیط برنامه نویسی Python 2.7، برنامه ای برای تشخیص رنگ بنویسم. ساده ترین روشی که برای این کار می توان به کار برد استفاده از دستور inRange برای ساخت یک ماسک برحسب رنگ مورد نظر و اعمال آن توسط دستور bitwise_and است. در این برنامه، هدف تشخیص سه رنگ اصلی آبی، قرمز و سبز است.
1 2 3 4 5 6 7 |
# import the necessary packages import numpy as np import cv2 # load the image and resize it image = cv2.imread('object.jpg') image=cv2.resize(image,(300,300),cv2.INTER_AREA) |
در ابتدا پکیج های مورد نیاز را فراخوانی می کنیم. Numpy برای Numerical Processing و cv2 برای OpenCV است.
سپس عکس مورد نظر را بازگذاری می کنیم. و ابعاد ان را به ۳۰۰ پیکسل تغییر می دهیم (این کار دلخواه است و می توان از آن صرف نظر کرد).
1 2 3 4 5 6 7 8 9 |
# create NumPy arrays from the boundaries lower_red= np.array([17,15,100], dtype = "uint8") upper_red= np.array([33,33,255], dtype = "uint8") lower_blue= np.array([66,27,0], dtype = "uint8") upper_blue= np.array([255,243,69], dtype = "uint8") lower_green= np.array([12,38,0], dtype = "uint8") upper_green= np.array([84,255,190], dtype = "uint8") |
هرکدام را به صورت آرایه ای از نوع uint8 تعریف می کنیم.
1 2 3 4 5 6 7 8 9 10 |
# find the colors within the specified boundaries and apply # the mask mask_red= cv2.inRange(image, lower_red, upper_red) output_red= cv2.bitwise_and(image, image, mask = mask_red) mask_blue= cv2.inRange(image, lower_blue, upper_blue) output_blue= cv2.bitwise_and(image, image, mask = mask_blue) mask_green= cv2.inRange(image, lower_green, upper_green) output_green= cv2.bitwise_and(image, image, mask = mask_green) |
در مرحله بعدی با استفاده از دستور inRange برای هر رنگ یک ماسک می سازیم. این دستور هر رنگی که در محدوده تعریف شده باشد را به رنگ سفید و بقیه را به رنگ سیاه تبدیل می نماید.
حال باید ماسک را به تصویر اصلی اعمال کنیم. برای این کار از دستور bitwise_and استفاده خواهیم کرد. این دستور متغیر image را با خودش و بر حسب ماسکی که قبلاً ساختیم AND می کند. بدین ترتیب هرکجا که در ماسک سفید باشد، تثویر اصلی نشان داده می شود و هر کجا که ماسک سیاه باشد، تصویر حذف و سیاه می شود.
1 2 3 4 5 6 7 8 |
# show the images output1=np.hstack([image, output_red]) output2=np.hstack([output_blue,output_green]) output3=np.vstack([output1,output2]) cv2.imshow("images",output3) cv2.imwrite("Color Detection.jpg",output3) cv2.waitKey(0) & 0xFF cv2.destroyAllWindows() |