آموزش OpenCV-Python
مقدمه ای بر آموزش OpenCV-Python
مرداد ۱۶, ۱۳۹۷
OpenCV-Python آموزش کار با ویدئو در
آموزش کار با ویدئو در OpenCV-Python
مرداد ۲۳, ۱۳۹۷
نمایش همه

آموزش کار با تصاویر در OpenCV-Python

کار با تصاویر در OpenCV-Python

کار با تصاویر در OpenCV-Python

اهداف آموزش کار با تصاویر در OpenCV-Python

  • در قسمت از آموزش کار با تصاویر در OpenCV-Python نحوه خواندن یک تصویر، نحوه نمایش آن و نحوه ذخیره آن را خواهید آموخت.
  • شما این توابع را یاد خواهید گرفت: ()cv2.imread()، cv2.imshow()، cv2.imwrite.

خواندن تصاویر

از تابع ()cv2.imread برای خواندن یک تصویر استفاده کنید. تصویر باید در دایرکتوری باشد که درون آن هستید یا اینکه مسیر کامل تصویر باید داده شود.

این تابع دو آرگومان ورودی می گیرد اولی اجباری و دومی اختیاری است. آرگومان اول آدرس تصویر و دومی نحوه بارگذاری تصویر است که میتواند سه حالت زیر باشد :

-۱ : (منفی ۱) بارگیری یک تصویر رنگی هر گونه شفافیت (transparently) تصویر را نادیده گرفت می شود. این مقدار پیش فرض است.

۰ : (صفر) بارگیری تصویر در حالت سیاه و سفید

۱ : (یک) تصویر را به حالت آلفا بارگیری می کند

 

کد زیر یک عکس رنگی را در قالب سیاه و سفید برای ما بارگذاری می کند و در متغیر img می ریزد.

import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('messi5.jpg',0)

“توجه”  اگر مسیر عکس اشتباه باشد هیچ خطایی رخ نخواهد داد ولی زمان فراخوانی تصویر به شما یک None  خواهد داد .

نمایش یک تصویر

از تابع ()cv2.imshow برای نمایش یک تصویر در یک پنجره استفاده می شود. پنجره به طور خودکار به اندازه تصویر باز می شود.

این تابع هم دو آرگومان ورودی می گیرد، اولین یک نام برای پنجره ای است که باز می شود که یک مقدار رشته ای است. آرگومان ورودی دوم تصویر ما است. شما می توانید هر تعداد پنجره به نمایش بگذارید فقط باید نامشان باهم فرق کنند.

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

تصویر زیر نمایش داده می شود

 

()cv2.waitKey در OpenCV-Python یک تابع است برای اتصال صفحه کلید. آرگومان ورودی آن زمان به میلی ثانیه است. این عملکرد برای هر رویداد صفحه کلید به میلی ثانیه مشخص شده منتظر می ماند. اگر در آن زمان هر کلید را فشار دهید، برنامه ادامه می یابد. اگر ۰ به عنوان ورودی منتقل شود، برای یک سیکل، کلیدی به طور نامحدود منتظر می ماند. همچنین می توان برای تشخیص کلید های خاص استفاده شود، مثلا اگر کلید a فشار داده شده و غیره که در زیر توضیح می دهیم.

 

()cv2.destroyAllWindowsبه سادگی تمام پنجره هایی که ایجاد کرده اید را از بین می برد. اگر می خواهید پنجره خاصی را از بین ببرید، از تابع ()cv2.destroyWindow استفاده کنید و در آن نام دقیق پنجره را به عنوان آرگومان منتقل کنید.

در OpenCV-Python یک مورد خاص وجود دارد که شما قبلا می توانید یک پنجره ایجاد کنید و تصویر را بعدا بارگذاری کنید. در این صورت، می توانید مشخص کنید که آیا پنجره قابل اندازه بندی مجدد است یا نه. این کار با عملکرد ()cv2.namedWindow انجام می شود. به طور پیش فرض، پرچم cv2.WINDOW_AUTOSIZE است. اما اگر شما پرچم را به عنوان cv2.WINDOW_NORMAL مشخص کنید، می توانید پنجره را تغییر دهید. این ویژگی زمانی مفید خواهد بود که تصویر در ابعاد خیلی بزرگ باشد.

کد زیر را ببینید :

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

ذخیره یک تصویر

از تابع cv2.imwrite() برای ذخیره یک تصویر استفاده میشود. و دو آرگومان برای ورودی دریافت می کند.

اولین آرگومان نام فایل است، آرگومان دوم تصویری است که می خواهید ذخیره کنید.

cv2.imwrite ('aramweb.png'، img)

این کد تصویر را در قالب PNG در دایرکتوری جاری ذخیره می کند.

 

خلاصه این که :

برنامه یک تصویر را به صورت خاکستری بارگیری می کند، آن را نمایش می دهد، اگر شما فشار ‘s’ را فشار دهید ، تصویر را ذخیره میکند و خارج میشود، و یا اگر کلید Esc را بزنید بدون ذخیره کردن از برنامه خارج می شود.

import numpy as np

import cv2

img = cv2.imread('aramweb.jpg',0)

cv2.imshow('image',img)

k = cv2.waitKey(0)

if k == 27: # wait for ESC key to exit
    cv2.destroyAllWindows()

elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('aramweb.png',img)
    cv2.destroyAllWindows()

هشدار : اگر از OpenCV-Python در یک دستگاه ۶۴ بیتی استفاده می کنید. مجبورید خط (۰)k = cv2.waitKey را به صورت زیر تغییر دهید: k = cv2.waitKey(0) ,0xFF

 

 

استفاده از Matplotlib

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

import numpy as np

import cv2

from matplotlib import pyplot as plt

img = cv2.imread('aramweb.jpg',0)

plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')

plt.xticks([]), plt.yticks([])

# to hide tick values on X and Y axis

plt.show()

 

خروجی کد بالا تصویر زیرخواهد بود

قسمت قبلی : مقدمه ای بر آموزش OpenCV-Python

قسمت بعدی : آموزش کار با ویدئو در OpenCV-Python

مرتضی حاتمی
مرتضی حاتمی
علاقمند به یادگیری موضوعات جدید و حل مسائل ، دوستدار محیط زیست ، معتقد به تعادل و تکامل ، علاقمند به موسیقی

2 دیدگاه ها

  1. سلام من یه کد دارم که تصویر camera رو میگیره و نمایش میده!
    میخوام وقتی یه حرکت کوچیک اتفاق افتاد یه کاری انجام بده!
    چیکار باید بکنم ؟

    کدم:
    import cv2

    cap = cv2.VideoCapture(0)
    while True:
    ret, frame = cap.read()
    cv2.imshow(‘frame’,frame)
    if ret:
    cv2.waitKey(1)
    cv2.imshow(‘frame’,frame)

    • سلام کد زیر این کار برای شما انجام میده

      import numpy as np
      import cv2
      
      sdThresh = 10
      font = cv2.FONT_HERSHEY_SIMPLEX
      #TODO: Face Detection 1
      
      def distMap(frame1, frame2):
          """outputs pythagorean distance between two frames"""
          frame1_32 = np.float32(frame1)
          frame2_32 = np.float32(frame2)
          diff32 = frame1_32 - frame2_32
          norm32 = np.sqrt(diff32[:,:,0]**2 + diff32[:,:,1]**2 + diff32[:,:,2]**2)/np.sqrt(255**2 + 255**2 + 255**2)
          dist = np.uint8(norm32*255)
          return dist
      
      cv2.namedWindow('frame')
      cv2.namedWindow('dist')
      
      #capture video stream from camera source. 0 refers to first camera, 1 referes to 2nd and so on.
      cap = cv2.VideoCapture(0)
      
      _, frame1 = cap.read()
      _, frame2 = cap.read()
      
      facecount = 0
      while(True):
          _, frame3 = cap.read()
          rows, cols, _ = np.shape(frame3)
          cv2.imshow('dist', frame3)
          dist = distMap(frame1, frame3)
      
          frame1 = frame2
          frame2 = frame3
      
          # apply Gaussian smoothing
          mod = cv2.GaussianBlur(dist, (9,9), 0)
      
          # apply thresholding
          _, thresh = cv2.threshold(mod, 100, 255, 0)
      
          # calculate st dev test
          _, stDev = cv2.meanStdDev(mod)
      
          cv2.imshow('dist', mod)
          cv2.putText(frame2, "Standard Deviation - {}".format(round(stDev[0][0],0)), (70, 70), font, 1, (255, 0, 255), 1, cv2.LINE_AA)
          if stDev > sdThresh:
                  print("Motion detected.. Do something!!!");
                  #TODO: Face Detection 2
      
          cv2.imshow('frame', frame2)
          if cv2.waitKey(1) & 0xFF == 27:
              break
      
      cap.release()
      cv2.destroyAllWindows()

       

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *