فهرست محتوا
در این مقاله سعی داریم به پرسش اینکه پردازش تصویر چیست پاسخ دهیم؛ با ما در این رابطه همراه باشید. پردازش تصویر راهی برای تبدیل تصویر به بعد دیجیتال و انجام عملیات خاص بر روی آن بهمنظور بهبود تصویر و یا استخراج اطلاعات از تصویر است. هنگامیکه ورودی، یک تصویر مانند فریمی از یک فیلم است. این عکس مانند نوعی از سیگنال زمان است و خروجی میتواند تصویر یا ویژگیهای مرتبط با آن تصویر باشد. معمولاً سامانه پردازش تصویر با تصاویر، مانند دو معادله ریاضی برخورد میکند.
پردازش تصویر یکی از فناوریهایی است که بهسرعت در حال پیشرفت است. این فناوری در بسیاری از قسمتها مورداستفاده قرار میگیرد. طراحی گرافیکی، هسته را برای مهندسین و صنایع علوم کامپیوتری شکل میدهد.
پردازش تصویر شامل گامهای زیر میشود:
واردکردن یک تصویر از اسکنر نوری و یا دوربین عکسبرداری.
تجزیهوتحلیل و مدیریت تصویر شامل فشردهسازی داده، بهبود کیفیت تصویر و تشخیص الگوهای بصری مانند تصاویر ماهوارهای
این امور باعث میشود گام آخر، جایی که نتایج میتوانند به یک تصویر یا گزارش بر اساس آنالیز تصویر تبدیل شوند؛ شکل بگیرد.
یکی از پاسخهایی که میتوان به سوال پردازش تصویر چیست؛ داد. میتوان پردازش تصویر را راهی برای افزایش کیفیت تصویر دانست و یا توسط آن هشدارهای درون تصویر را جمعآوری و برای اعلام به سامانهای دیگر و پیشگوییهای بیشتر استفاده نمود.
اصولاً از کتابخانههای زیر در پایتون برای پردازش تصویر استفاده میشود.
کتابخانه scikit-image بسته متنباز پایتون است و با اعضای پیشفرضی همچون NumPy اجرا میشود. این کتابخانه از الگوریتمها و منابع در تحقیقات، دانشگاه و صنعت مورداستفاده قرار میگیرد. این کتابخانه بسیار سرراست است حتی برای تازهواردان به محیط پایتون. کدها از کیفیت بالایی برخوردار هستند توسط اعضا بازنگری میشود و توسط اعضای داوطلب نوشته میشود.
https://scikit-image.org/docs/stable/
SciPy یکی از ماژولهای اساسی پایتون (همچون NumPy) است که میتواند برای وظایف پردازشی مورداستفاده قرار بگیرد. خصوصاً ماژول scipy.ndimage ( در SciPy نسخه ۱.۱.۰) توابعی ارائه میدهد که میتوانند بر روی آرایههای n-بعدی NumPy مورداستفاده قرار بگیرند. این بسته هماکنون شامل توابع فیلترینگ آنلاین و آفلاین، ریختشناسی باینری، انتقال B-spline و رتبه دهی اشیا است.
https://www.scipy.org/docs.html
کتابخانه PIL (Python Imaging Library) کتابخانه برنامهنویسی رایگان پایتون است که پشتیبانی از اجرا، مدیریت و ذخیره تصاویر در فرمتهای مختلف را فراهم میسازد. توسعه این کتابخانه متوقفشده است. آخرین نسخه در سال ۲۰۰۹ منتشرشده است. خوشبختانه کتابخانه Pillow موجود است. چیزی شبیه به PIL. با نصب راحت و قابلیت عملکرد در بیشتر سیستمعاملها به همراه پشتیبانی از پایتون ۳ و تبدیل فضای رنگ
https://pillow.readthedocs.io/en/3.1.x/index.html
کتابخانه OpenCV (Open Source Computer Vision Library) یکی از مورداستفادهترین کتابخانهها در حوزه بینایی کامپیوتر است. OpenCV-Python رابط برنامهنویسی (API) برای پایتون است. OpenCV-Python بهتنهایی اجرا نمیشود. چراکه OpenCV با زبان C/C++ نوشتهشده است. اما بهوسیله ویژگیهای منعطف پایتون و ساختار آن میتوانید از این کتابخانه باقدرت بیشتر در پایتون استفاده کنید.
https://docs.opencv.org/master/d6/d00/tutorial_py_root.html
Mahotas یک ویرایشگر گرافیکی و کامپیوتری پایتون است. این ابزار شامل توابع سنتی پردازش تصویر مانند فیلترگذاری و توابع ریختشناسی و همچنین توابع محاسباتی مدرن مانند تعریف موقعیت و نقطه موردنظر است. نمایش در محیط پایتون صورت میپذیرد که برای توسعه سریع مناسب است. اما الگوریتمها برای سرعت بیشتر در اجرا با زبان C++ اجرا میشوند. کتابخانه Mahotas سریع با کد کم است.
https://mahotas.readthedocs.io/
ITK (Insight Segmentation and Registration Toolkit) سیستم میانبر متنباز است که برای توسعهدهندهها مجموعهای از ابزارهای نرمافزاری آنالیز تصویر را فراهم میسازد. این ابزارها در زبان برنامهنویسی شما در دسترس خواهند بود. “این مجموعه همچنین ابزار آنالیز تصویری است همراه با شمار زیادی از ویژگیها که شامل فیلترینگ استاندارد، طبقهبندی تصاویر و رجیستریشن تصویر است. SimpleITK تحت زبان C++ نوشتهشده است اما در شمار زیادی از زبانهای برنامهنویسی ازجمله پایتون قابلاستفاده است.
https://simpleitk.readthedocs.io/en/master/
گاهی پردازش تصویر بهطور غلط بهعنوان دستیابی به زیبایی در تصویر خوانده میشود. بااینحال دقیقترین تعریف پردازش تصویر عبارت است از تشبیه سامانه بینایی انسان و تجهیزات تصویربرداری دیجیتال. سامانه بینایی انسان، جهان پیرامون را مشابه با دوربینهای دیجیتال نمیبیند. این در حالی است که تفاوتهای بارزی بین آشکارسازهای دیجیتال و انسان وجود دارد. همچنین گامهای دستیابی به تصویر نیز متفاوت هستند.ویرایش تصاویر باید در راه مناسب و علمی صورت پذیرد تا دیگران بتوانند نتایج انسانی را بازتولید و صحه سنجی نمایند. این امر شامل ضبط و گزارش دهی فعالیتهای پردازشی و اعمال رفتار مشابه برای کنترل تصاویر است.
همچنین مقاله “مبانی پردازش تصویر دیجیتال” را بخوانید.
توضیح ساده پردازش تصویر به پردازش تصویر دیجیتال اشاره دارد. برای مثال ویرایش و هرگونه دستکاری صدا که توسط رایانه دیجیتال میتوان صورت داد. پردازش تصویر راهی برای بهبود تصویر و یا دریافت اطلاعات مفید از تصویر است. این امر درجایی که تصویر برش داده میشود بهعنوان پردازش سیگنال یا توپوگرافی در نظر گرفته میشود. در حال حاضر پردازش تصویر در قله فناوریهای در حال پیشرفت قرار دارد. این فناوری در مرکز توجهات تحقیقاتی مهندسین و دستورات علوم کامپیوتری قرار دارد.
دادههای تولیدی و یا جمعآوریشده توسط ما، دادههای ناقصی هستند. درنتیجه این دادهها نباید در برنامه بهصورت مستقیم به کار گرفته شوند. بنابراین ما نیاز داریم تا این دادهها را ابتدا آنالیز کنیم. پردازشهای پیشرفته را اعمال کنیم و سپس تغییرات را اعمال کنیم.
برای مثال فرض کنیم که قرار است ما عملیات جداسازی گربه را صورت دهیم. سیستم ما تصویر را دریافت میکند و به ما میگوید که آیا در تصویر گربه وجود دارد و یا خیر. اولین گام، ایجاد یک مقسم با تصویر صدها گربه است. یکی از مشکلات ما این است که تمام تصاویر ما نباید دارای اندازه مشابه باشند. بنابراین پیش از اینکه مدل خود را آموزش دهیم. نیاز داریم تا تمامی آنها را بهاندازه استاندارد تبدیل کنیم.
اینیکی از عواملی است که اهمیت پردازش تصویر در بسیاری از کاربردهای بینایی کامپیوتر را مشخص میکند.
هدف – بهبود موضوعی کیفیت تصویر
هدف – سادهسازی تشخیص و آنالیز مجموعه تصاویر
بهطور مثال برای تغییر رزولوشن و جهت و نمایش بر روی صفحات موبایل
این گام ابتداییترین گام در پردازش تصویر است. تشخیص تصویر دیجیتال برای ایجاد تصاویر خاص بهمانند آرایش آرایهای از اشیا است. این عملیات میتواند در هنگام ذخیرهسازی، چاپ و نمایش چنین تصاویری مورد استفاده قرار بگیرد.
ترمیم تصویر، دریافت تصویر نویزی و اندازهگیری بر روی تصویر جدید است. این امر میتواند به شیوههای مختلفی صورت پذیرد مانند مات کردن، هدف فن ترمیم تصویر، کاهش نویز تصویر و افزایش قدرت تصمیمگیری است.
پردازش تصویر رنگی نیازمند فهم فیزیک نور و ساختار رنگ است. انسان از رنگ برای تشخیص جزییات در طبقهبندی مواد، ساختار بدنهها، غذا، مکانها و زمان روز استفاده میکند. هدف استفاده از رنگ در فرآیند پردازش جداسازی تصویر است.
زمانی که شما تصویر و اجزا درون آن مانند اتمسفر، ابرها، درختان و گلها را مورد تجزیهوتحلیل قرار میدهید. شما از سطح متفاوتی در توپوگرافی استفاده میکنید. موجک مانند استفاده از آن قلمهای متفاوت است. تبدیل موجک، ابزاری مؤثر برای باز ارائه تصویر است. تبدیل موجک اجازه میدهد تا سرمایهگذاری بر روی راهکارهای مختلف در تصویر مورد استفاده قرار بگیرد.
فشردهسازی تصویر نوعی عملیات در عکسبرداری دیجیتال است که باعث کاهش هزینههای پهنای باند و دیگر موارد میشود.
یکی از وظایف قابل انجام تشخیص متن توسط پردازش تصویر برای مثال تشخیص دست خط و یا پلاک است.
قبل از اینکه ادامه دهیم. بیایید پیشنیازهایی که شما برای ادامه به آن نیازمند هستید را مورد بررسی قرار دهیم. ابتدا شما باید دارای دانش ابتدایی در برنامهنویسی در هر زبانی باشید. دوم، شما نیاز دارید که با اصول و مبنای کار ما در الگوریتمهای یادگیری ماشین که ما در پردازش تصویر استفاده قرار میدهیم آشنا باشید. بهعنوان یک مزیت شما میتوانید از پیش، دانشی در زمینه OpenCV داشته باشید. اما این امر لازم نیست.
یکی از اموری که شما حتماً باید پیرو این آموزش بدانید این است که تصویر چگونه در حافظه ارائه میشود. هر تصویر با مجموعهای از پیکسلها ارائه میشوند. ماتریس مقادیر پیکسل. مقادیر محدوده پیکسلهای تصویر خاکستری از محدوده بین ۰ تا ۲۵۵ است و شدت روشنایی برای پیکسل را ارائه میکند. برای مثال اندازه تصویر 20*20 تصویر است. این تصویر در ماتریسی 20*20 (مجموع ۴۰۰ پیکسل) باز ارائه میشود.
اگر شما در حال کار با تصاویر رنگی هستید. باید بدانید که شما دارای سه کانال (قرمز، سبز و آبی (RGB)) هستید. بنابراین سه ماتریس برای یک تصویر وجود خواهد داشت.
این نوشته تلاشی ویژه برای افرادی است که به حوزه پردازش تصویر علاقهمند هستند و خواهان اجرای مثالی ساده هستند. بیایید ببینیم چقدر شروع به کار آسان است. تمام آنچه ما نیاز داریم. دانش ابتدایی پایتون و OpenCV است.
یک زبان برنامهنویسی شیءگرا، تفسیری، سطح بالا، و همهمنظوره است، که خیدو فان روسوم آن را طراحی کرده است، و اولین بار در سال ۱۹۹۱ منتشرشده است. فلسفه اصلی طراحی پایتون «خوانایی بالای کد» است و نویسههای فاصله خالی در آن معنادار هستند و مکرر استفاده میشوند. ساختار زبانی و دیدگاه شیءگرا در پایتون بهگونهای طراحیشده است که به برنامهنویس امکان نوشتن کد منطقی و واضح (بدون ابهام) را برای پروژههای کوچک و بزرگ میدهد.
گاهی اینکه پردازش تصویر چیست را شما میتوانید با سوال OpenCV چیست هم رده بدانید. OpenCV کتابخانهای عظیم و متنباز برای بینایی کامپیوتر، یادگیری ماشین و پردازش تصویر است که اکنون نقش اصلی را در انجام عملیات به لحظه در سامانهها ایفا میکند. بدینوسیله میتوان تصاویر و فیلمها را برای تشخیص اشیا، چهره یا دست خط مورد پردازش قرارداد. OpenCV با کتابخانههای متنوعی مانند Numpy یکپارچه میشود. کتابخانههای پایتون قادر هستند تا ساختار آرایههای OpenCV را مورد تجزیهوتحلیل قرار دهند. در این زمینه مقاله ما درباره ” OpenCV چیست” را از دست ندهید!
HaaR Cascades: اوپنسیوی راههای متفاوتی برای آموزش الگوریتمهای سفارشیمان برای یافتن هر چیز موردعلاقه در پردازش تصویر است. HaaR Cascades همان فایلهایی است که شامل چنین مدلهای آموزشی است.
برای نصب بستههای کتابخانهای که در بخشهای پیشین مقاله پردازش تصویر جیست که ذکر کردیم. مطمئن شوید که نسخه بروز پایتون ۳ را بر روی رایانه خود نصبکردهاید.
برای سیستمهای ویندوز و لینوکس:
برای لینوکس:
برای بررسی اینکه آیا بسته بر روی سیستم شما نصبشده است و یا خیر، میتوانید از دستور زیر در پایتون استفاده کنید:
اگر خطایی در واردکردن دریافت نکردید. تبریک میگویم نصب با موفقیت صورت پذیرفته است.
Data Science Toolkit
https://www.anaconda.com/products/individual
تصویر اصلی
#Import the Header File
import cv2
#Reading Image file from File Location
img = cv2.imread(‘image.jpg’)
#Functions to find out generic properties of an Image
print("Image Properties")
print("Number of Pixels: " + str(img.size))
print("Shape/Dimensions: " + str(img.shape))
#Output
Image Properties
Number of Pixels: 60466176
Shape/Dimensions: (5184, 3888, 3)
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('image.jpg') // Combination of all colors
b,g,r = cv2.split(img) # get b,g,r
rgb_img = cv2.merge([r,g,b])
plt.imshow(rgb_img)
x,y,z = np.shape(img)
red = np.zeros((x,y,z),dtype=int)
green = np.zeros((x,y,z),dtype=int)
blue = np.zeros((x,y,z),dtype=int)
for i in range(0,x):
for j in range(0,y):
red[i][j][0] = rgb_img[i][j][0]
green[i][j][1]= rgb_img[i][j][1]
blue[i][j][2] = rgb_img[i][j][2]
plt.imshow(red) // red color image ( fig 2)
plt.imshow(green) // green color image ( fig 3)
plt.imshow(blue) // Blue color image ( fig 4)
#Now we will again create the original image from these Red, Blue and Green Images
retrack_original = np.zeros((x,y,z),dtype=int)
for i in range(0,x):
for j in range(0,y):
retrack_original[i][j][0] = red[i][j][0]
retrack_original[i][j][1] = green[i][j][1]
retrack_original[i][j][2] = blue[i][j][2]
cv2.imwrite('ori.jpg',retrack_original)
plt.imshow(retrack_original)
خروجی کد بالا
شکل ۱: ترکیب تمامی رنگها
شکل ۲: رنگ قرمز
شکل ۳: رنگ سبز
شکل ۴: رنگ آبی
مثالی ساده از اینکه پردازش تصویر چیست:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread('image.jpg')
gray_image = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
fig, ax = plt.subplots(1, 2, figsize=(16, 8))
fig.tight_layout()
ax[0].imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
ax[0].set_title("Original")
ax[1].imshow(cv.cvtColor(gray_image, cv.COLOR_BGR2RGB))
ax[1].set_title("Grayscale")
plt.show()
b, g, r = cv.split(img)
fig, ax = plt.subplots(1, 3, figsize=(16, 8))
fig.tight_layout()
ax[0].imshow(cv.cvtColor(r, cv.COLOR_BGR2RGB))
ax[0].set_title("Red")
ax[1].imshow(cv.cvtColor(g, cv.COLOR_BGR2RGB))
ax[1].set_title("Green")
ax[2].imshow(cv.cvtColor(b, cv.COLOR_BGR2RGB))
ax[2].set_title("Blue")
h, w = img.shape[:2]
half_height, half_width = h//4, w//8
transition_matrix = np.float32([[1, 0, half_width],
[0, 1, half_height]])
img_transition = cv.warpAffine(img, transition_matrix, (w, h))
plt.imshow(cv.cvtColor(img_transition, cv.COLOR_BGR2RGB))
plt.title("Translation")
plt.show()
h, w = img.shape[:2]
rotation_matrix = cv.getRotationMatrix2D((w/2,h/2), -180, 0.5)
rotated_image = cv.warpAffine(img, rotation_matrix, (w, h))
plt.imshow(cv.cvtColor(rotated_image, cv.COLOR_BGR2RGB))
plt.title("Rotation")
plt.show()
fig, ax = plt.subplots(1, 3, figsize=(16, 8))
# image size being 0.15 times of it's original size
image_scaled = cv.resize(img, None, fx=0.15, fy=0.15)
ax[0].imshow(cv.cvtColor(image_scaled, cv.COLOR_BGR2RGB))
ax[0].set_title("Linear Interpolation Scale")
# image size being 2 times of it's original size
image_scaled_2 = cv.resize(img, None, fx=2, fy=2, interpolation=cv.INTER_CUBIC)
ax[1].imshow(cv.cvtColor(image_scaled_2, cv.COLOR_BGR2RGB))
ax[1].set_title("Cubic Interpolation Scale")
# image size being 0.15 times of it's original size
image_scaled_3 = cv.resize(img, (200, 400), interpolation=cv.INTER_AREA)
ax[2].imshow(cv.cvtColor(image_scaled_3, cv.COLOR_BGR2RGB))
ax[2].set_title("Skewed Interpolation Scale")
from PIL import Image
from PIL import ImageFilter
# Open Existing Image
OrgImage = Image.open("image.jpg")
# Apply Simple Blur Filter
blurImage = OrgImage.filter(ImageFilter.BLUR)
blurImage.show()
# blurImage.save("output1.jpg")
# Apply BoxBlur Filter
boxImage = OrgImage.filter(ImageFilter.BoxBlur(2))
boxImage.show()
# boxImage.save("output2.jpg")
# Apply GaussianBlur Filter
gaussImage = OrgImage.filter(ImageFilter.GaussianBlur(2))
gaussImage.show()
# gaussImage.save("output3.jpg")
import cv2
import numpy as np
import matplotlib.pyplot as plt
# This is a magic command to display in an external window
image = cv2.imread("image.jpg", 1)
# Loading the image
half = cv2.resize(image, (0, 0), fx = 0.1, fy = 0.1)
bigger = cv2.resize(image, (1050, 1610))
stretch_near = cv2.resize(image, (780, 540),
interpolation = cv2.INTER_NEAREST)
Titles =["Original", "Half", "Bigger", "Interpolation Nearest"]
images =[image, half, bigger, stretch_near]
count = 4
for i in range(count):
plt.subplot(2, 2, i + 1)
plt.title(Titles[i])
plt.imshow(images[i])
plt.show()
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('image.jpg',0)
edges = cv2.Canny(img,100,200)
plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
plt.show()
from PIL import Image,ImageFilter
#Read image
im = Image.open('image.jpg')
#Display image
im.show()
from PIL import ImageEnhance
enh = ImageEnhance.Contrast(im)
enh.enhance(1.8).show("30% more contrast")
در پاسخ عملی به اینکه پردازش تصویر چیست؛ میتوانیم به کاربردهای بینایی کامپیوتر زیر اشاره کنیم:
۱.سامانههای ترابری هوشمند: میتوان در این سامانهها برای تشخیص خودکار شمارهها و تشخیص علائم ترافیکی استفاده کرد.
۲.تشخیص از راه دور: در این حوزه از تصاویری که توسط ماهواره و یا مالتی اسکنری که بر روی یک فضاپیما دریافت شده است؛ استفاده میشود. از این تصاویر برای پیشبینی وضعیت آب و هوایی، شرایط جوی، تولیدات کشاورزی و … مورد استفاده قرار میگیرد.
۳.رهگیری اشیا در حال حرکت: این برنامه به شما امکان میدهد تا حرکت را اندازهگیری کنید و جهت حرکت را شبیهسازی نمایید.
۴.نظارت تصویری: سامانههای نظارتی محیطی برای نظارت در دریا و خشکی استفاده میشوند.
۵.کنترل محصول: این مجموعه از عملکردها باعث بهبود کیفیت و افزایش تولید در صنعتی میگردد.
در بررسی مطلب اینکه پردازش تصویر جیست. بیایید گام عملی دیگری برداریم. گامهایی برای تکمیل پروژه به همراه سورس کد به شرح زیر است:
csv = pd.read_csv(‘colors.csv’, names=index, header=None)
در اینجا متغیر ‘ap’ شامل آرگومانهایی است که کمک میکند ما تصاویر را توسط فرمت -i که به کاربر اجازه تغییر تصویر را میدهد استفاده میکنیم
ایجاد دریافت آرگومان مسیر تصویر از طریق خط فرمان
ap = argparse.ArgumentParser()
ap.add_argument(‘-i’, ‘–image’, required=True, help=”Image Path”)
args = vars(ap.parse_args())
img_path = args[‘image’]
متغیر “Clicked” به حرکت اشارهگر موس و کلیک بر روی تصویر در قطعه کد پایتون برای پردازش تصویر اشاره دارد و مشخص میکند که کدام رنگ است.
بهصورت پیشفرض این مقدار برای قرمز، سبز و آبی صفر است.
بهمنظور بررسی نوع داده ارائهشده در فایل csv ما میتوانیم ۵ خط اول را از طریق دستور .head مورد بررسی قرار دهیم.
متغیرهای “index” دارای پارامترها/ویژگیهای تعریفشده در مجموعهای از دادهها در سرآیند CSV هستند.
#Reading the image with opencav
img = cv2.imread(img_path)
#declaring global variables (are used later on)
clicked = False
r = g = b = xpos = ypos = 0
#Reading csv file with pandas and giving names to each column
index=["color","color_name","hex","R","G","B"]
#function to calculate minimum distance from all colors and get the most matching color
def getColorName(R,G,B):
minimum = 10000
for i in range(len(csv)):
d = abs(R- int(csv.loc[i,"R"])) + abs(G- int(csv.loc[i,"G"]))+ abs(B- int(csv.loc[i,"B"]))
if(d<=minimum):
minimum = d
cname = csv.loc[i,"color_name"]
return cname
#function to get x,y coordinates of mouse double click
def draw_function(event, x,y,flags,param):
if event == cv2.EVENT_LBUTTONDBLCLK:
global b,g,r,xpos,ypos, clicked
clicked = True
xpos = x
ypos = y
b,g,r = img[y,x]
b = int(b)
g = int(g)
r = int(r)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_function)
while(1):
cv2.imshow("image",img)
if (clicked):
#cv2.rectangle(image, startpoint, endpoint, color, thickness)-1 fills entire rectangle
cv2.rectangle(img,(20,20), (750,60), (b,g,r), -1)
#Creating text string to display( Color name and RGB values )
text = getColorName(r,g,b) + ' R='+ str(r) + ' G='+ str(g) + ' B='+ str(b)
#cv2.putText(img,text,start,font(0-7),fontScale,color,thickness,lineType )
cv2.putText(img, text,(50,50),2,0.8,(255,255,255),2,cv2.LINE_AA)
#For very light colours we will display text in black colour
if(r+g+b>=600):
cv2.putText(img, text,(50,50),2,0.8,(0,0,0),2,cv2.LINE_AA)
clicked=False
#Break the loop when user hits 'esc' key
if cv2.waitKey(20) & 0xFF ==27:
break
cv2.destroyAllWindows()
این تابع بر روی تمامی رکوردهای فایل csv اجرا میشود و مقادیر را طبق قرمز، سبز و آبی تصویر دادهشده در مقابل فضای رنگی RGB حقیقی جایگزین میکند. اگر مقدار دادهشده از حداقل مقدار کمتر باشد سپس نام رنگ دادهشده برابر با مقدار دادهشده در فایل csv خواهد بود.
حال ما مقادیر r و g و b را داریم. اکنون موقع استفاده از تابعی دیگر برای بازسازی نام رنگ برای بازیابی مقادیر RGB است. بهمنظور پیدا کردن نام رنگ، ما فاصله رنگ را بهمنظور پیدا کردن کمترین فاصله با رنگهای تعریفشده داریم.
این تابع مقادیر پیکسل rgb را محاسبه میکند. پارامترهای فعال با نام رویداد، وضعیت پیوند موس (x,y) و … است. ما در این تابع بررسی میکنیم که آیا دابل کلیک رخداده است و مجموع r,g,b و x,y موقعیت موس را مشخص میکنیم.
زمانی که رخ داد دو کلیک روی دهد. این تابع نام رنگ و مقادیر RGB را در پنجره بهروز میکند.
ما با استفاده از cv2.imshow() تصویر را در پنجره رسم میکنیم. زمانی که کاربر دو بار بر روی پنجره کلیک میکند ما یک مستطیل رسم میکنیم و نام رنگ را در پنجره موجود توسط توابع cv2.rectangle و cv2.putText () ترسیم میکنیم.
ما در پروژه پایتون با سورس کد درباره رنگ RGB و نام رنگ پیکسل آموختیم. ما آموختیم تا رویدادهایی مانند دو بار کلیک بر پنجره را مدیریت کنیم و آموختیم که چگونه فایلهای csv را توسط pandas و اجرای وظایف بر روی دادهها را مدیریت کنیم. این امور برای بسیاری از نرمافزارهای ویرایش تصویر و کاربردهای ترسیمی مورداستفاده قرار میگیرند.
در این مقاله شما علاوه بر اینکه آموختید پردازش تصویر چیست، آموختید که چگونه عملیاتهای پایهای و اصلی را انجام دهید. پردازش تصویر شیرین است؛ نظر شما چیست؟