ویژگی‌های رابط کاربری در OpenCV

نوار لغزنده به عنوان پالت رنگ

۲ دقیقه مطالعهOpenCV 5.xبه‌روزرسانی:

هدف#

  • یادگیری اتصال نوار لغزنده (Trackbar) به پنجره‌های OpenCV
  • با این توابع آشنا خواهید شد: ()cv.getTrackbarPos، ()cv.createTrackbar و غیره.

دموی کد#

در اینجا یک برنامه کاربردی ساده ایجاد خواهیم کرد که رنگ مشخص‌شده توسط شما را نشان می‌دهد. شما پنجره‌ای دارید که رنگ را نمایش می‌دهد و سه نوار لغزنده برای تعیین هر یک از رنگ‌های B، G و R. نوار لغزنده را جابجا می‌کنید و رنگ پنجره متناسب با آن تغییر می‌یابد. به طور پیش‌فرض، رنگ اولیه روی مشکی تنظیم می‌شود.

برای تابع ()cv.createTrackbar، آرگومان اول نام نوار لغزنده، دوم نام پنجره‌ای است که به آن متصل شده است، آرگومان سوم مقدار پیش‌فرض، چهارم مقدار بیشینه (حداکثر) و پنجم تابع بازخوانی (Callback) است که با هر بار تغییر مقدار نوار لغزنده اجرا می‌شود. تابع بازخوانی همیشه یک آرگومان پیش‌فرض دارد که همان موقعیت جاری نوار لغزنده است. در مورد ما، تابع کاری انجام نمی‌دهد، بنابراین به سادگی از pass استفاده می‌کنیم.

کاربرد مهم دیگر نوار لغزنده، استفاده از آن به عنوان دکمه یا کلید قطع و وصل (Switch) است. OpenCV به طور پیش‌فرض قابلیت دکمه (Button) ندارد؛ بنابراین می‌توانید از نوار لغزنده برای به دست آوردن چنین قابلیتی استفاده کنید. در برنامه خود، کلیدی ایجاد کرده‌ایم که در آن برنامه تنها در صورت روشن بودن (ON) کلید کار می‌کند، در غیر این صورت صفحه همیشه سیاه خواهد بود.

import numpy as np
import cv2 as cv

def nothing(x):
    pass

# Create a black image, a window
img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')

# create trackbars for color change
cv.createTrackbar('R','image',0,255,nothing)

cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)

# create switch for ON/OFF functionality
switch = '0 : OFF \n1 : ON'
cv.createTrackbar(switch, 'image',0,1,nothing)

while(1):
    cv.imshow('image',img)
    k = cv.waitKey(1) & 0xFF
    if k == 27:
        break

    # get current positions of four trackbars
    r = cv.getTrackbarPos('R','image')
    g = cv.getTrackbarPos('G','image')
    b = cv.getTrackbarPos('B','image')
    s = cv.getTrackbarPos(switch,'image')

    if s == 0:
        img[:] = 0
    else:
        img[:] = [b,g,r]

cv.destroyAllWindows()

تصویر خروجی برنامه به صورت زیر است:

نوار لغزنده به عنوان پالت رنگ — تصویر ۱

تمرین‌ها#

  1. یک برنامه Paint با رنگ‌ها و شعاع قلم‌موی قابل تنظیم با استفاده از نوارهای لغزنده ایجاد کنید. برای رسم، به آموزش قبلی در مورد مدیریت ماوس مراجعه فرمایید.