وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

مقدمه ای بر OpenCV با پایتون

0 17
زمان لازم برای مطالعه: 7 دقیقه


معرفی

در این آموزش قصد داریم روش استفاده را یاد بگیریم OpenCV کتابخانه در پایتون OpenCV یک کتابخانه منبع باز است که توسط چندین پلتفرم از جمله ویندوز، لینوکس و MacOS پشتیبانی می شود و برای استفاده در چندین زبان دیگر نیز موجود است. با این حال، بیشتر در Python برای برنامه های یادگیری ماشین، به ویژه در حوزه Computer Vision استفاده می شود.

جدای از پشتیبانی بین پلتفرمی و در دسترس بودن آن به چندین زبان رایانه دیگر، که امکان استفاده از برنامه های توسعه یافته در آن را فراهم می کند. روی در سیستم های مختلف، OpenCV در مقایسه با کتابخانه های دیگر، از نظر محاسبات نسبتاً کارآمد است، زیرا از عملیات برداری برای بیشتر توابع خود استفاده می کند.

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

نصب و راه اندازی

توجه داشته باشید: از آنجایی که ما قصد داریم از OpenCV در زبان پایتون استفاده کنیم، این یک الزام ضمنی است که از قبل پایتون (نسخه 3) را نصب کرده باشید. روی ایستگاه کاری شما بسته به سیستم عامل خود، یکی از دستورات زیر را برای نصب کتابخانه OpenCV اجرا کنید روی سیستم شما:

پنجره ها

$ pip install opencv-python

سیستم عامل مک

$ brew install opencv3 --with-contrib --with-python3

لینوکس

$ sudo apt-get install libopencv-dev python-opencv

برای بررسی اینکه آیا نصب شما موفقیت آمیز بوده است یا خیر، دستور زیر را در پوسته پایتون یا خط فرمان خود اجرا کنید/ terminal:

import cv2

اگر خطایی دریافت نکردید روی واردات cv2 سپس به درستی نصب شد.

عملیات تصویر پایه

اکنون که OpenCV را نصب کرده ایم روی ایستگاه های کاری ما، بیایید دستمان را با برخی از قابلیت هایی که OpenCV ارائه می دهد، کثیف کنیم.

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

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

برای نمایش یک تصویر، باید دو چیز را بدانیم:

  1. مسیر تصویر (هر دو مسیر مطلق و نسبی کار می کنند)
  2. حالت خواندن (خواندن، نوشتن و غیره)

تابعی که برای خواندن/بارگذاری یک تصویر استفاده خواهیم کرد این است cv2.imread()، که دارای دو تغییر است. اولی است IMREAD_GRAYSCALE، که همانطور که از نام آن پیداست، قبل از خواندن تصویر را به مقیاس خاکستری تبدیل می کند. دومی است IMREAD_UNCHANGED، که تصویر را بدون قطع کانال آلفا بارگذاری می کند. پیش فرض است IMREAD_COLOR، که به سادگی تصویر رنگی را فقط با استفاده از کانال های RGB می خواند.

بیایید یک مثال را کدنویسی کنیم:

import cv2

my_bike = cv2.imread('bike.png')

با این کار تصویر دوچرخه از سیستم فایل بارگیری و در آن ذخیره می شود my_bike متغیر برای عملیات بعدی

توجه داشته باشید: اگر از کد بالا با خطا مواجه شدید، تنها سه دلیل برای آن وجود دارد. اول اینکه مسیری که مشخص کردید نادرست است، دوم اینکه فایل تصویری که مشخص کرده اید وجود ندارد و آخرین مورد اینکه نوع تصویر (jpg/jpeg/png) در مسیر تصویر نادرست است.

حالا بیایید تصویری را که خواندیم نمایش دهیم. می تواند توسط cv2.imshow() تابع. اگر از Matlab استفاده کرده اید، ممکن است با این عملیات تصویر آشنا باشید.

cv2.imshow('my_bike', my_bike)

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

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

ذخیره یک تصویر یک ویژگی بسیار پرکاربرد است، زیرا ممکن است لازم باشد تصویر خود را به روز کرده و تغییرات را در سیستم فایل برای استفاده بعدی ذخیره کنیم. OpenCV دارای یک cv2.imwrite() عملکرد ذخیره تصاویر

به عنوان مثال:

cv2.imwrite('bike.png', my_bike)

در اینجا نام و مکان فعلی تصویر را مشخص می کنیم. تصویر به دست آمده به طور خودکار در فهرست کاری فعلی ذخیره می شود.

عملیات حسابی روی تصاویر

عملیات حسابی روی تصاویر به جمع، تفریق، ضرب یا تقسیم چندین تصویر برای تولید یک تصویر جدید که ترکیبی حسابی از تصاویر ورودی است، اشاره دارد. محاسبات تصویر کاربردهای زیادی دارد، مانند افزودن واترمارک به یک تصویر، ایجاد ترکیبی ترکیبی از دو تصویر، اعمال انواع مختلف فیلترهای تصویر و غیره.

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

بیایید این دو مثال را کدگذاری کنیم:

افزودن تصاویر

import cv2


image_1 = cv2.imread('bike.jpg')
image_2 = cv2.imread('car.jpg')


result = cv2.add(image_1, image_2)

cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

این waitKey فرمان منتظر می ماند تا یک کلید را قبل از حرکت فشار دهید روی به دستور بعدی این برای اینکه برنامه تا زمانی که یک کلید فشار داده نشود به نمایش تصویر شما ادامه می دهد مفید است، در غیر این صورت برای یک ثانیه نمایش داده می شود و پس از توقف اجرای برنامه به سرعت ناپدید می شود.

ترکیب تصاویر

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

برای روشن شدن بیشتر آن را کدگذاری می کنیم:

import cv2


image_1 = cv2.imread('bike.jpg')
image_2 = cv2.imread('car.jpg')

result = cv2.addWeighted(image_1, 0.9, image_2, 0.1)

cv2.imshow('result', result)
cv2.waitKey(0) 
cv2.destroyAllWindows()

مجموع اوزان داده شده به addWeighted تابع باید برابر با 1.0 باشد. همچنین می توانید در پایان یک مقدار اسکالر بدهید که به تمام مقادیر پیکسل تصویر حاصل اضافه می شود.

توجه داشته باشید: تصاویر می توانند از هر نوع باشند. با این حال، نوع باید برای همه تصاویر یکسان باشد. به عنوان مثال، اگر از فرمت PNG استفاده می کنید، تمام تصاویری که برای محاسبات استفاده می شوند باید در فرمت PNG نیز باشند.

صاف کردن تصویر

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

فرض کنید یک تصویر 10×10 دارید، و می‌خواهید آن را از یک کادر 3×3/فیلتر میانگین عبور دهید، چگونه این کار را انجام می‌دهید؟

از سمت چپ بالای تصویر شروع می‌کنید، فیلتر 3×3 خود را در آنجا قرار می‌دهید و عنصر مرکزی را با میانگین هر 9 عنصر جایگزین می‌کنید. این اولین مرحله بود، حالا فیلتر خود را یک قدم به سمت راست حرکت داده و همین کار را تکرار کنید process تا زمانی که کل تصویر را پوشانده باشید. نمونه ای از تصویر 10×10 و فیلتر میانگین 3×3 در زیر برای مرجع شما نشان داده شده است:

فیلتر/ماسک:

مقدمه ای بر OpenCV با پایتون

فیلتر در حال اعمال است روی تصویر 10×10:

مقدمه ای بر OpenCV با پایتون

اکنون که درباره روش کارکرد آن صحبت کردیم، بیایید امتحان کنیم و ببینیم چگونه می‌توانیم فیلترهای مختلف را اعمال کنیم روی تصویر ما با استفاده از OpenCV. لطفا نظرات را به طور کامل بخوانید تا بدانید کدام خط کد برای کدام فیلتر استفاده شده است:

import cv2


original_image = cv2.imread('my_bike.png')


average_image = cv2.blur(original_image,(3,3))


gaussian_image = cv2.GaussianBlur((original_image,(3,3),0))


median_image = cv2.medianBlur(original_image,3)

توجه داشته باشید: با استفاده از کد اضافی زیر می توانید تصاویر به دست آمده را مشاهده کنید:

import matplotlib.pyplot as plt

plt.imshow(average_image)
plt.show()

دگرگونی های تصویر

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

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

مقیاس بندی

به عبارت ساده تر، مقیاس بندی اساساً فقط تغییر اندازه تصویر است، یعنی بزرگتر یا کوچکتر کردن آن. resize تابعی است که برای مقیاس بندی تصاویر در OpenCV استفاده می شود. تغییر اندازه سه نوع دارد: INTER_CUBIC، INTER_LINEAR، و INTER_AREA. بیایید یک مثال با استفاده از این توابع برای مقیاس بندی کدنویسی کنیم. لطفاً کدها، نظرات و توضیحات را به دقت بخوانید زیرا توضیح می‌دهند که دقیقاً چه اتفاقی می‌افتد روی در کد:

import cv2
import numpy as np
import matplotlib.pyplot as plt

image = cv2.imread('my_bike.jpg')


result_1 = cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)


result_2 = cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_AREA)


plt.imshow(result_1)
plt.imshow(result_2)
plt.show()

اینجا در resize تابع، fx پارامتر in نشان دهنده ضریب مقیاس برای عرض است، fy نشان دهنده ارتفاع فاکتور مقیاس و interpolation عملکرد مورد استفاده برای مقیاس بندی (کوچک شدن یا گسترش) را مشخص می کند.

چرخش

چرخش به ما امکان می دهد یک تصویر را حول محور برای یک زاویه مشخص حرکت دهیم.

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

import cv2
import matplotlib.pyplot as plt


image = cv2.imread('my_bike.jpg',0)


r, c = image.shape

matrix = cv2.getRotationMatrix2D((cols/2,rows/2), 180, 1)
result = cv2.warpAffine(image,matrix,(c,r))


plt.imshow(result)
plt.show()

در getRotationMatrix2D تابع، 180 درجه چرخش تصویر را مشخص می کند، 1 ضریب مقیاس بندی است، فراخوانی تابع ماتریس چرخش را در matrix متغیر.

این warpAffine فراخوانی تابع از ماتریسی که از روش قبلی محاسبه کردیم استفاده می کند تا تصویر را مطابق با مشخصات ما بچرخاند.

نتیجه

برای جمع بندی همه چیز، اجازه دهید چند نکته مهم را که در این مقاله مورد بحث قرار دادیم، تکرار کنیم. OpenCV یک کتابخانه است که به چندین زبان در دسترس است و بیشتر در ارتباط با NumPy، SciPy و Matplotlib استفاده می شود، همانطور که در برخی از مثال های بالا نیز دیدیم. برخی از توابع آن مانند Matlab است و همچنین از عملیات برداری پشتیبانی می کند و در نتیجه کارایی محاسباتی را افزایش می دهد.

علاوه بر این، OpenCV یکی از بهترین کتابخانه‌های موجود برای دامنه Computer Vision است و پس از خواندن این مقاله، باید بتوانید برخی از برنامه‌های بینایی کامپیوتر / یادگیری ماشین را که با استفاده از OpenCV توسعه یافته‌اند جستجو کنید.

بگذارید بدانیم که این مقاله فقط نوک کوه یخ بود و OpenCV چیزهای بیشتری برای ارائه دارد. خواندن این به شما امکان می دهد عمیق تر شوید و در مورد سایر ویژگی های پیشرفته ای که OpenCV ارائه می دهد بیاموزید.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-22 02:17:12

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید