رزبری پای ماژول دوربین پایتون Python پردازش تصویر

آموزش پردازش تصویر OpenCV با رزبری پای – ردیابی شی رنگی Color Space

نوشته شده توسط آرش کدخدایی

در بخش‌های قبلی آموزش پردازش تصویر با نرم افزار OpenCV به عملیات‌های پایه و مقدماتی پرداختیم. از اکنون وارد مباحث پردازش تصویر خواهیم شد. در این بخش و هشتمین قسمت از آموزش، به تغییر رنگ پس زمینه در نرم افزار OpenCV می‌پردازیم. این مورد در مبحث پردازش تصویر بسیار اهمیت دارد. در مکان‌هایی لازم است که رنگ‌هایی با طیف خاص را شناسایی کرد. در ادامه آموزش پردازش تصویر OpenCV رزبری پای با دیجی اسپارک، مرجع تخصصی رزبری پای به زبان فارسی همراه باشید.

 


اهداف پردازش تصویر


در این آموزش یاد خواهیم گرفت چگونه فضاهای رنگی مانند BGR، HSV و Gray را به هم تبدیل کنیم. در این آموزش ما برنامه‌ای خواهیم ساخت که جسم رنگی را از دوربین استخراج کند و به ما نشان دهد. در این آموزش با توابعی همچون cv2.cvtColor(), cv2.inRange() کار خواهیم کرد.

 


تغییر فضای رنگ (Color-space)


بیش از ۱۵۰ مدل برای تبدیل فضای رنگی وجود دارد. ولی ما فقط از دو تبدیل BGR \leftrightarrow Gray و BGR \leftrightarrow HSV استفاده خواهیم کرد. برای انجام تبدیلات ما از تابغ cv2.cvtColor(input_image, flag) استفاده خواهیم کرد. در آن flag نوع تبدیل را مشخص میکند. به عنوان مثال برای تبدیل BGR \rightarrow Gray از cv2.COLOR_BGR2GRAY و برای تبدیل BGR \rightarrow 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 منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

 

درباره نویسنده

آرش کدخدایی

یک تازه کار علاقه مند به تکنولوژی :)

تبادل نظر و رفع عیب با ثبت دیدگاه

۱ دیدگاه

  • با سلام و احترام
    ضمن عرض تشکر و قدردانی از ارائه مطالب مفیدتون یک سوال داشتم در رابطه با تشخیص زاویه در تصویر.
    میخواهیم زاویه دو شی را در تصویر نسبت به همدیگر تشخیص دهیم؛ ممنون میشم راهنمایی فرمایید.
    با کمال احترام