در بخشهای قبلی آموزش پردازش تصویر با نرم افزار OpenCV به عملیاتهای پایه و مقدماتی پرداختیم. از اکنون وارد مباحث پردازش تصویر خواهیم شد. در این بخش و هشتمین قسمت از آموزش، به تغییر رنگ پس زمینه در نرم افزار OpenCV میپردازیم. این مورد در مبحث پردازش تصویر بسیار اهمیت دارد. در مکانهایی لازم است که رنگهایی با طیف خاص را شناسایی کرد. در ادامه آموزش پردازش تصویر OpenCV رزبری پای با دیجی اسپارک، مرجع تخصصی رزبری پای به زبان فارسی همراه باشید.
اهداف پردازش تصویر
در این آموزش یاد خواهیم گرفت چگونه فضاهای رنگی مانند BGR، HSV و Gray را به هم تبدیل کنیم. در این آموزش ما برنامهای خواهیم ساخت که جسم رنگی را از دوربین استخراج کند و به ما نشان دهد. در این آموزش با توابعی همچون cv2.cvtColor(), cv2.inRange() کار خواهیم کرد.
تغییر فضای رنگ (Color-space)
بیش از ۱۵۰ مدل برای تبدیل فضای رنگی وجود دارد. ولی ما فقط از دو تبدیل BGR Gray و BGR HSV استفاده خواهیم کرد. برای انجام تبدیلات ما از تابغ cv2.cvtColor(input_image, flag)
استفاده خواهیم کرد. در آن flag نوع تبدیل را مشخص میکند. به عنوان مثال برای تبدیل BGR Gray از cv2.COLOR_BGR2GRAY
و برای تبدیل BGR HSV از cv2.COLOR_BGR2HSV
استفاده میکنیم. برای دیدن بقیه تبدیلات از این کد استفاده کنید:
>>> import cv2 >>> flags = [i for i in dir(cv2) if i.startswith('COLOR_')] >>> print flags
در ادامه خواهید دید این تبدیلات چه کاربردی دارند.
ردیابی اشیا در پردازش تصویر
در فضای رنگی HSV تشخیص رنگ ها نسبت به BGR آسان تر است. در یک مثال میخواهیم یک شی با رنگ آبی را استخراج کنیم برای این کار این مراحل را طی میکنیم:
- ویدیو دریافتی از دوربین را فریم به فریم میگیریم
- تبدیل فضای رنگی از BGR به HSV
- استخراج شی آبی رنگ
به کدها دقت کنید:
from picamera.array import PiRGBArray from picamera import PiCamera import cv2 import numpy as np camera = PiCamera() camera.resolution = (640, 480) rawCapture = PiRGBArray(camera, size=(640, 480)) for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): image = frame.array hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # تعریف رنگ آبی در محدوده HSV lower_blue = np.array([110,50,50]) upper_blue = np.array([130,255,255]) # آستانه تصویر HSV برای گرفتن رنگ های آبی تنها mask = cv2.inRange(hsv, lower_blue, upper_blue) # انجام عملیات بیتی برای ماسک کردن تصویر res = cv2.bitwise_and(image ,image ,mask= mask) cv2.imshow('frame',image) cv2.imshow('mask',mask) cv2.imshow('res',res) rawCapture.truncate(0) k = cv2.waitKey(5) & 0xFF if k == 27: break cv2.destroyAllWindows()
در تصویر نویز هایی دیده میشود که بعدا آنها را درست خواهیم کرد
یافتن مقادیر HSV
همانطور که در مثال دیدید ما محدوده رنگمان را از [۱۱۰,۵۰,۵۰] تا [۱۳۰,۲۵۵,۲۵۵] مشخص کردیم. برای یافتن این مقادیر ابتدا باید کد رنگ خود را در BGR پیدا کنیم. سپس با استفاده از این دستورات کد رنگ خود را در فضای رنگی HSV بیابیم.
>>> green = np.uint8([[[0,255,0]]]) >>> hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV) >>> print hsv_green [[[ ۶۰ ۲۵۵ ۲۵۵]]]
حال از [H-10, 100,100] به عنوان محدوده پایینی و از [H+10, 255, 255] به عنوان محدوده بالایی استفاده میکنیم. راه های دیگری برای یافتن کد رنگ HSV نیز میباشد که باید در اینترنت سرچ کنید. کد رنگ HSV به ترتیب مشخص کننده Hue (رنگدانه) ،Saturation(اشباع) و Value(روشنایی) میباشد. در قسمت بعدی میخواهیم حاشیه های تصویر خود را بیابیم…
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
پروژه و دریافت بن ارسال رایگان
برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکههای اجتماعی از جمله آپارات و اینستگرام، با هشتگهای دیجی_اسپارک دانشجوکیت digispark daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
با سلام و احترام
ضمن عرض تشکر و قدردانی از ارائه مطالب مفیدتون یک سوال داشتم در رابطه با تشخیص زاویه در تصویر.
میخواهیم زاویه دو شی را در تصویر نسبت به همدیگر تشخیص دهیم؛ ممنون میشم راهنمایی فرمایید.
با کمال احترام