پردازش تصویربا پایتون-قست چهارم

پردازش تصویر چیست؟

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

 

شروع کار پردازش تصویر  با  ایمپورت ها است. ما از cv2، numpy و کمی از matplotlib (اغلب به عنوان یک روش راحت برای نمایش تصاویر) استفاده می کنیم .

matplotlib : کتابخانه ای برای رسم نمودارها

matplotlib.pyplot: هر تابع pyplot باعث تغییراتی در شکل می شود: به عنوان مثال

  شکلی را  می گیرد،  یک منطقه ترسیم در شکل ایجاد می کند،   چند خط در یک منطقه  از شکل ترسیم میکند،  شکل را با برچسب و غیره تزئین می کند و … .

NumPy : کتابخانه ای  برای محاسبات علمی با پایتون است. این شامل موارد زیر است:
۱) یک آبجکت آرایه n بعدی قدرتمند

۲) ابزار برای ادغام C / C ++ و کد Fortran 

۳) …..

import cv2, matplotlib

import numpy as np

import matplotlib.pyplot as plt 

 

فرمت عکس

 

بسيار خوب! ما نیاز داریم تصاویر را بخوانیم تا فرمتی که آنها نشان میدهند را بفهمیم.در OpenCv تصاویر به صورت زیر آرایه ۳ بعدی numpy نمایش داده می شوند. یک تصویر رنگی  از ردیف های پیکسل تشکیل شده و هر پیکسل با آرایه ای از مقادیر رنگ نمایش داده می شود.

BGR

 

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

تصویر اصلی

 

 

import numpy as np 

import cv2

 img = cv2.imread('test.jpg') 

print(img)

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

img = cv2.imread('test.jpg')

نمایش فرمت آن (اساسا یک آرایه ۳ بعدی از اطلاعات رنگ پیکسل، در قالب BGR):

print( img)
[[[۱۸۳ ۱۸۳ ۱۸۳][۱۰۲ ۱۰۲ ۱۰۲][۱۰۲ ۱۰۲ ۱۰۲]..., [۱۰۲ ۱۰۲ ۱۰۲][۱۰۲ ۱۰۲ ۱۰۲][۱۰۲ ۱۰۲ ۱۰۲]]

[[۱۰۲ ۱۰۲ ۱۰۲][۱۹۳ ۱۹۳ ۱۹۳][۲۵۳ ۲۵۳ ۲۵۳]..., [۱۶۸ ۱۶۸ ۱۶۸][۲۵۴ ۲۵۴ ۲۵۴][۱۹۳ ۱۹۳ ۱۹۳]]
[[۲۵۳ ۲۵۳ ۲۵۳][۲۵۲ ۲۵۲ ۲۵۲][۲۵۲ ۲۵۲ ۲۵۲]..., [۱۶۷ ۱۶۷ ۱۶۷][۲۵۳ ۲۵۳ ۲۵۳][۲۵۲ ۲۵۲ ۲۵۱]]
..., [[۲۵۵ ۲۵۵ ۲۴۷][۲۵۵ ۲۵۵ ۲۴۷][۲۵۴ ۲۵۴ ۲۵۱]..., [ ۶۸ ۶۲ ۵۶][۲۰۲ ۱۹۷ ۱۹۱][۱۳۶ ۱۲۳ ۱۰۹]]
[[۲۵۵ ۲۵۵ ۲۴۷][۲۵۵ ۲۵۵ ۲۴۶][۲۵۵ ۲۵۵ ۲۵۰]..., [۱۲۱ ۱۱۶ ۱۱۱][۱۸۶ ۱۷۹ ۱۷۳][۱۲۱ ۱۱۰ ۹۷]]
[[۲۵۵ ۲۵۵ ۲۴۴][۲۵۵ ۲۵۵ ۲۴۳][۲۵۵ ۲۵۵ ۲۴۶]..., [۱۷۸ ۱۷۲ ۱۶۶][۱۴۵ ۱۳۶ ۱۲۷][۱۰۷ ۹۶ ۸۴]]]  >>>

اینجا [ ۱۴۵ ۱۳۶ ۱۲۷] و… ، مقادیر یک پیکسل، آبی، قرمز و سبز (BGR) هستند. توجه داشته باشید که OpenCV به طور پیش فرض یک تصویر را در قالب BGR بارگذاری می کند.

داده کاوی با پایتون_قسمت دوم

datamining

http://www.adaptivecycle.nl/index.php?title=File:Data_Mining.png

 

روشهای داده کاوی

 

۱) طبقه بندی

۲) خوشه بندی

۳) کشف قانون همبستگی

۴) تشخیص و کشف خطا

۵) کشف الگوی ترتیبی

 

فرایند داده کاوی

 Knowledge Discovery in Databases (KDD) 

کشف دانش از پایگاه داده ها

فرایند داده کاوی

فرایند داده کاوی

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

داده کاوی در کل مراحل و روش های مختلفی دارد. 

برای داده کاوی اول باید داده ها را  تمیز کرد، دسته بندی کرد، مشکلاتی که دارند رو حل کرد و …

 

روش الگوریتم   CRISP

Cross Industry Standard Process:فرایندهای استاندارد صنعت متقابل برای داده‌کاوی(ویکی)

CRISP

Cross Industry Standard Process

مراحل الگوریتم   CRISP

 

مرحله اول فهم کسب و کار

 مرحله دوم  درک داده ها 

 مرحله سوم  آماده سازی داده ها 

 مرحله چهارم درست کردن مدل اجرایی برای انجام داده کاوی 

مرحله پنجم ارزیابی مدلی که ایجاد کردیم با یکسری دادههای تستی 

مرحله آخر از این مدل استفاده می کنیم برای تحلیل داده و توسعه

همانطور که در تصویر مشاهده میشود، توسط فلش هایی، مراحل به هم دیگر راه دارند که جهت تکمیل هر مرحله استفاده میشود.

دایره بزرگ هم نشان دهنده ی تکمیل کل فرایند و آماده شدن آن برای استفاده در این پروژه یا پروژه های دیگر است. 

داده کاوی با پایتون_قسمت اول

داده کاوی(Datamining)

داده کاوی

بیایید با هم تصور کنیم انبوه داده ی ما معدن سنگ است(Big_Data )

datamining-big-data

داده کاوی-داده های بزرگ

 

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

دانش

Knowledge-دانش

داده های بزرگ(Big_Data )

 

برای داده_کاوی ما نیاز به حجم زیادی داده داریم که این داده ها، Big_Data نامیده میشود. حجم زیاد یعنی اونقدر داده ها زیاد باشه که به راحتی نشه تجزیه و تحلیل کرد. فق با ابزار خاص.

از ویژگیهای مهم Big_Data :

۱) ارزشمند بودن داده ها(value)

۲)متنوع بودن داده ها(variety

۳)حجیم بودن داده ها(volume)حجم زیاد یعنی اونقدر داده ها زیاد باشه که به راحتی نشه تجزیه و تحلیل کرد. فقط با ابزار خاص.

۴)داده ها به سرعت در حال تغییر و تولید هستند(Velocity)

۵)داده ها به درد بخور و صحیح هستند(veracity)

 

در کل سه ویژگی اول از همه مهمتر هستند.

 

 

تفاوت تصاویر دیجیتال و آنالوگ

تصویر چیست؟

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

 

http://hamamatsu.magnet.fsu.edu پردازش تصویر

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

تصویر خاکستری(grayscale)

یک تصویر خاکستری (grayscale)، یک تابع یا سیگنال دو بعدی مانند:(p(x,y ، که مقدار آن برابر شدت روشنایی است. xوy مختصات مکانی هستند و z شدت روشنایی:

p(x,y)=z

 

 

16

 

15

 

به هر کدام از این خونه ها یک پیکسل وارزش آن حدود ۱ بایت یعنی مقداری بین ۰-۲۵۵ (۰=سیاه و ۲۵۵=سفید).

 

 

 

 

از کجا تصاویر گرفته می شوند؟
 دوربین های دیجیتال
 اسکنرهای MRI
بسته های گرافیکی کامپیوتری
 اسکنرهای بدن

تصویر دیجیتال

A Charge Coupled Device (CCD)

14

 

دوربین دیجیتال یک دستگاه الکترونیکی است که برای گرفتن عکس و ذخیرهٔ آن بجای فیلم عکاسی از حسگرهای حساس به نور معمولاً از نوع CCD یا CMOS استفاده می‌کند و تصویر گرفته شده توسط سنسور طی چند مرحله به حافظهٔ دوربین برای استفاده فرستاده می‌شود.ویکی

پیکسل(pixel)

در این دوربین‌ها تصویر توسط یک سنسور CCD گرفته می‌شود. CCD بصورت ردیفها و ستونهایی از سنسورهای نقطه‌ای نور هستند که به هر کدام از آنها پیکسل گفته میشود.  هر چه تعداد این نقاط بیشتر و فشرده تر باشد، تصویر دارای دقت بالاتری است) هر سنسور نور را به ولتاژی متناسب با درخشندگی نور تبدیل کرده و آن را به بخش تبدیل سیگنالهای آنالوگ به دیجیتال ADC می‌فرستد که در آنجا نوسانات دریافتی از CCD بهکدهای مجزای باینری (عددهای مبنای دو بصورت صفر و یک) تبدیل می‌شود. خروجی دیجیتال از ADC به یک پردازنده سیگنال‌های دیجیتال DSP فرستاده می‌شود که کنتراست و جزئیات تصویر در آن تنظیم می‌شود و قبل از فرستادن تصویر به حافظه برای ذخیره تصویر، اطلاعات را به یک فایل فشرده تبدیل می‌کند. هر چه نور درخشنده‌تر باشد، ولتاژ بالاتری تولید شده و در نتیجه پیکسل‌های رایانه‌ای روشن‌تری ایجاد می‌شود. هر چه تعداد این سنسورها که به‌صورت نقطه هستند بیشتر باشد، وضوح تصویر به دست آمده بیشتر است و جزئیات بیشتری از تصویر گرفته می‌شود.ویکی

از آنجا که تصاویر به طور کلی مربع یا مستطیل شکل  هستند، هر پیکسل ای که از دیجیتال سازی تصویر حاصل می شود، با یک جفت مختصات x و y  با مقادیر خاص نشان داده می شود.  در بسیاری از موارد، محل x به عنوان شماره پیکسل نامیده می شود و موقعیت Y به عنوان شماره خط شناخته می شود. بنابراین یک تصویر دیجیتال از یک آرایه پیکسل مستطیلی (یا مربع) تشکیل شده است که یک مجموعه از مقادیر شدت روشنایی را نشان می دهد 

The sensor array

58

 

می تواند کمتر از یک cm2 باشد

آرایه ای از photosite است.
هر photosite یک سطل از بار الکتریکی است.
آنها با توجه به شدت نور شارژ میشوند.

 

سنسور(ccd)

54

17

هر سنسور یا پیکسل، نور  را به ولتاژی متناسب با درخشندگی نور تبدیل میکند. اگر هر کدام از پیکسل ها را که روی ccd یا سنسور دوربین قرار دارد مانند سطل  و  نوری که از اطراف باید بگیرند مانند بارش باران بدانیم، آنگاه پیکسل دارای نور یا  بار الکتریکی را photosite گویند.

ccd

ccd-RGB

خطای Cannot run turtle module

خطای Cannot run turtle module

Traceback (most recent call last):

File “C:/Python/Python36/turtle2.py”, line 1, in <module>

import turtle as t; t.forward(100)

File “C://Python/Python36\turtle.py”, line 3, in <module>

t=turtle.Turtle()

AttributeError: module ‘turtle’ has no attribute ‘Turtle

این خطا واسه اینه که نباید اسم فایل را turtle میذاشتیم باید اسمشا تغییر میدادیم و اگر تو پوشه یه همچین اسمی داشتیم پاک میکردیم.

 

پایتون

آموزش پایتون_ تابع lambda(ناشناس)

train-your-python-part-14-more-advanced-lists-lambda-and-lambda-operators.w1456

lambda

یک روش دیگر برای تعریف تابع استفاده از توابع ناشناس که با عنوان توابع  lambda شناخته میشوند.  در این قسمت شما نحوه تعریف و استفاد از آن را یاد خواهید گرفت. در پایتون تابع ناشناس تابعی هست که بدون نام تعریف میشود. در حالی که توابع معمولی با استفاده از کلمه کلیدی def تعریف میشوند، توابع ناشناس با استفاده از کلمه کلیدی lambda  تعریف میشوند. به خاطر همین توابع ناشناس توابع lambda   نامیده میشوند.

Lambda, filter, reduce and map

 

عملگر(اپراتور) Lambda

 

خوبه بدونید عده ای از لامبدا میترسن، عده ای آن را دوست دارند و عده ای هم از آن متنفرن. مطمئنا در پایان این مطلب عاشق آن میشوید. عملگر لامبدا یا تابع lambda راهی برای ایجاد توابع ناشناس کوچک است، یعنی توابع بدون نام. این توابع چیز بی ممصرفی هستن یعنی فقط در جایی که تعریف میشوند مورد استفاده قرار میگیرند. توابع لامبدا به طور عمده در ترکیب با توابع ()filter(), map و reduce() استفاده میشوند. ویژگی لامبدا به دلیل تقاضای برنامه نویسان Lisp به پایتون اضافه شد.

سینتکس کلی یک تابع لامبدا بسیار ساده است:

lambda argument_list: expression.

argument list   شامل یک لیست از آرگومان جدا شده با کاما است و expression عبارت محاسباتی با استفاده از این آرگومانها است. شما می توانید تابع را به یک متغیر اختصاص دهید تا نامی به آن بدهید.

مثال زیر از یک تابع لامبدا، مجموع دو آرگومان را به دست می آورد:

>>> f = lambda x, y : x + y >>> f(1,1) 2

تابع map()

فایده و مزیت عملگر لامبدا زمانی که در ترکیب با map() استفاده می شود، دیده می شود. map () یک تابع با دو آرگومان  است:

r = map(func, seq)

اولین آرگومان func نام یک تابع وآرگومان دوم seq یک دنباله (به عنوان مثال یک لیست) است.

map()، تابع func روی تمام عناصر seg اعمال میکند. . map() یک لیست جدید را با عناصری که توسط func تغییر می کنند، باز می گرداند.

>>> def fahrenheit(T):
return ((float(9)/5)*T + 32)

>>> def celsius(T):
return (float(5)/9)*(T-32)

>>> temp = (36.5, 37, 37.5,39)

>>> F = map(fahrenheit, temp)

>>> C = map(celsius, F)

در مثال بالا ما از لامبدا استفاده نکرده ایم. با استفاده از لامبدا،  ما نباید تعریف و نام توابع فارنهایت () و سانتیگراد () را داشته باشیم.

>>> Celsius = [39.2, 36.5, 37.3, 37.8]
>>> Fahrenheit = map(lambda x: (float(9)/5)*x + 32, Celsius)
>>> print (Fahrenheit)
[۱۰۲٫۵۶, ۹۷٫۷۰۰۰۰۰۰۰۰۰۰۰۰۰۳, ۹۹٫۱۴۰۰۰۰۰۰۰۰۰۰۰۰۱, ۱۰۰٫۰۳۹۹۹۹۹۹۹۹۹۹۹۹]
>>> C = map(lambda x: (float(5)/9)*(x-32), Fahrenheit)
>>> print (C)
[۳۹٫۲۰۰۰۰۰۰۰۰۰۰۰۰۰۳, ۳۶٫۵, ۳۷٫۳۰۰۰۰۰۰۰۰۰۰۰۰۰۴, ۳۷٫۷۹۹۹۹۹۹۹۹۹۹۹۹۹۷]
>>> 

map () را می توان به بیش از یک لیست اعمال کرد. لیست ها باید طول یکسان داشته باشند. map () تابع lambda خود را به عناصر لیست های استدلال اعمال می کند، یعنی ابتدا برای عناصر با شاخص ۰، و سپس به عناصر با شاخص اول، تا زمانی که n-th index رسیده است، اعمال می شود:

>>> a = [1,2,3,4]
>>> b = [17,12,11,10]
>>> c = [-1,-4,5,9]
>>> map(lambda x,y:x+y, a,b)
[۱۸, ۱۴, ۱۴, ۱۴]
>>> map(lambda x,y,z:x+y+z, a,b,c)
[۱۷, ۱۰, ۱۹, ۲۳]
>>> map(lambda x,y,z:x+y-z, a,b,c)
[۱۹, ۱۸, ۹, ۵]

ما در مثال بالا می توانیم ببینیم پارامتر x مقادیر خود را از لیست a می گیرد، در حالی که y مقدار آن را از b و z از لیست c دریافت می کند.

Filtering

تابع (filter(function, list  یک روش عالی برای فیلتر کردن تمام عناصر یک لیست ارائه می دهد که عملکرد تابع True را برمیگرداند. تابع( filter(f,l  به عنوان اولین پارامتر، تابع f را  نیاز دارد. f یک مقدار بولین، یعنی درست یا غلط، را برمیگرداند. این تابع به هر عنصر لیست l اعمال خواهد شد. تنها اگر f return True عنصر لیست را در لیست نتیجه قرار دهد.

>>> fib = [0,1,1,2,3,5,8,13,21,34,55]
>>> result = filter(lambda x: x % 2, fib)
>>> print (result)
[۱, ۱, ۳, ۵, ۱۳, ۲۱, ۵۵]
>>> result = filter(lambda x: x % 2 == 0, fib)
>>> print( result)
[۰, ۲, ۸, ۳۴]
>>>

 Reducing a List

توسط تابع (reduce(func, seq،  تابع func  روی دنباله seq پیوسته  اعمال میکند و آن را کاهش میدهد.

>>> reduce(lambda x,y: x+y, [47,11,42,13])
۱۱۳
https://www.python-course.eu/lambda.php

https://www.python-course.eu/lambda.php

 

پردازش تصویر با پایتون قسمت نهم

.

نمایش تصویرRGB با Matplotlib

[gap height=”19″]

[gap height=”19″]

ما می دانیم که matplotlib ، کتابخانه پایتون برای کار با نمودارها و ارقام است. اما اگر می خواستیم یک تصویر ساده RGB را نمایش دهیم چه؟ آیا می توانیم با matplotlib انجام دهیم؟

در این قسمت مابه شما نشان می دهیم که چگونه یک تصویرRGB   را با matplotlib فقط در چند خط کد  میشه نشان داد و هرگونه ابهاماتی را که هنگام استفاده از OpenCV و matplotlib وقتی با هم اجرا میشوند، مواجه می شوید روشن کنید.

یک تصویر RGB، که گاهی اوقات به عنوان یک تصویر رنگی واقعی نامیده می شود، به صورت یک آرایه سه بعدی  داده m × n × ۳ ذخیره می شود که کانالهای قرمز، سبز و آبی رنگ را برای هر پیکسل تعریف می کند. رنگ هر پیکسل با ترکیبی از فرمت های فایل های گرافیکی تصاویر RGB، به عنوان تصاویر ۲۴(۸*۳) بیتی ذخیره می شود، حال آنکه هر کدام از کانالهای قرمز، سبز و آبی ۸ بیت هستند.

در این قسمت میخواهیم یک تصویر را با OpenCV می خوانیم وبا   matplotlibنمایش میدهیم.

[gap height=”19″]

تصویر اصلی

تصویراصلی

[gap height=”19″]

کد زیر فقط از opencv برای خواندن و نمایش تصویر استفاده  کرده است.

[gap height=”19″]

import numpy as np
import cv2
img = cv2.imread('test.png')
cv2.imshow('opencv',img)
cv2.waitKey (0)
cv2.destroyAllWindows ()

[gap height=”19″]

خروجی:

11

نمایش تصویر با استفاده از opencv

[gap height=”19″]

در کد زیر هم فقط از matplotlib برای خواندن و نمایش تصویر  استفاده شده است.

 [gap height=”19″]

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
image = mpimg.imread("img2.png")
plt.imshow(image)
plt.show()

[gap height=”19″]

اولین کاری که ما انجام می دهیم این است که کتابخانه matplotlib را وارد کنیم.

ولی ما فقط از یک قسمتی از این کتابخانه مربوط به خواندن تصویر است به عنوان mpimg  ، که جایگزین  matplotlib.image،  همچنین از plt که جایگزین matplotlib.pyplot است  برای نمایش استفاده کردیم.


ما می توانیم تصویر زیر را ببینیم:

[gap height=”19″]

12

نمایش تصویر با استفاده از matplotlib با محور دور تصویر

[gap height=”19″]

در مورد خلاص شدن از محور  و اعداد از کد زیر استفاده میکنیم:

plt.axis(“off”)
plt.imshow(image)
plt.show()
 
 

خواندن تصویر با opencv و نمایش آن توسط matplotlib :

[gap height=”19″]

import cv2
import matplotlib.pyplot as plt
image = cv2.imread("img2.png") 
 plt.axis("off") 
plt.imshow(image)
plt.show() 

[gap height=”19″]

اما نتیجه انتظار نمی رفت تصویر زیر باشد:

[gap height=”19″]

13

خواندن تصویر با opencv و نمایش آن توسط matplotlib

[gap height=”19″]

چرا نتیجه مورد انتظار نیست؟

پاسخ به عنوان یک نکته در opencv نهفته است.

[gap height=”10″]

نکته

[gap height=”10″]
OpenCV تصاویر RGB را به عنوان آرایه های چند بعدی Numpy معرفی می کند … اما به ترتیب معکوس! به این معنی که تصاویر در واقع در BGR به جای RGB نشان داده شده است!

پس چگونه این مسئله را حل کنیم؟

هرچند که ثابت است اما همه ما باید انجام دهیم تصویر را از BGR به RGB   تبدیل   کنیم:

[gap height=”19″]

import numpy as np
 import matplotlib.pyplot as plt
 import cv2
img = cv2.imread('img2.png')
temp = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
 plt.imshow(temp)
plt.imshow(temp)
plt.axis('off')
plt.show()

[gap height=”19″]

نتیجه اسکریپت ما نشان می دهد که رنگ های تصویر ما درست است.

 

 

پایتون

آموزش پایتون_for

مفهوم Loop 

یک حلقه یاLoop  دنباله ای از دستورالعمل است که به طور مداوم تکرار می شود تا شرایط خاصی به دست آید. به عنوان مثال، ما مجموعه ای از اقلام داریم و یک حلقه ایجاد می کنیم تا از طریق آن بتوانیم  تمام عناصر موجود در مجموعه را پیمایش کنیم. حلقه ها در Python می توانند با for یا while  ایجاد شوند.

در این جلسه قراره در مورد حلقه ها بحث کنیم. در ابتدا از for شروع میکنیم :

for روی هر کدام ا آیتم های دنباله ای مثل رشته، لیست و… تکرار میشود. به عبارت دیگر آیتم ها به همان ترتیبی که در دنباله هستند طاهر میشوند. مهمترین مسئله در این حلقه، تعداد دفعات تکرار مشخص است

مثلا کامپیوتر n عدد از کاربر دریافت میکنه و بزرگترین آنها را نمایش میده.

for var in sequence:
   do_statement(s)

حلقه for با string

 

>>> stg=”sufra.ir”
>>> for i in stg:
print(i)

s
u
f
r
a
.
i
r
>>>
نکته

وقتی حلقه for  را اجا میکنیم آیتم ها به هر تعدادی که هستند زیر هم دیگر چاپ میشوند. برای اینکه کنار هم چاپ شوند باید از (“”=print(i,end  استفاده کنیم

 

print(i,end=””) ???

 

end

همانطور که در تصویر بالا مشاهده میکنید end=’\n”  به صورت پیش فرض تعریف شده تا بعد از تایپ  هر آیتم به خط بعدی رفته تا آیتم های دیگر را چاپ کند.

 

stg="sufra.ir"
>>> for i in stg:
 print(i,end=" ")
s u f r a . i r

حلقهfor با list

>>> a = ['python', 'html', 'c++']
 >>> for i in a:
 print(i , len(i))
python 6
 html 4
 c++ 3
 >>>

حلقه for با tuple

T=("A","B","C")
>>> for x in T:
 print(x)
A
 B
 C
 >>> for x in T:
 print(x,end="")
ABC
 >>>

حلقه for با  Dictionary

>>> d = {'x': 1, 'y': 2, 'z': 3}
 >>> for key in d:
 print (key, ":", d[key])
x : 1
 y : 2
 z : 3
>>> data = { "de": "Germany", "sk": "Slovakia", "hu": "Hungary", "ru": "Russia" }
>>> for k, v in data.items():
print("{0} is an abbreviation for {1}".format(k, v))
de is an abbreviation for Germany
 sk is an abbreviation for Slovakia
 hu is an abbreviation for Hungary
 ru is an abbreviation for Russia
 >>>

حلقه for با else

>>> words = ["cup", "star", "monkey", "bottle", "paper", "door"]
>>> for word in words:
print(word)
else:
print("Finished looping")
cup
star
monkey
bottle
paper
door
Finished looping
>>>

دستور else  بعد از تمام شدن حلقه اجرا میشود. ما لیستی از کلمات را با یک حلقه به پیش میبریم. وقتی تکرار شد، پیام “پایان حلقه” را چاپ می کنیم که در داخل بدن قرار دارد و پس از کلمه کلیدی دیگری قرار دارد.

حلقه for با range

 

تابع range لیستی از اعداد ۰-(۱-n) را تولید میکند.

 

>>>
 for i in range(1, 6):
print("Statement executed {0}".format(i))
Statement executed 1
 Statement executed 2
 Statement executed 3
 Statement executed 4
 Statement executed 5
 >>>
>>> for n in range(1, 11):
 print(n, end=' ')
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰
 >>> for n in range(0, 11, 2):
 print(n, end=' ')
۰ ۲ ۴ ۶ ۸ ۱۰
 >>>

حلقه for با ایندکس

>>> words = ["cup", "star", "monkey", "bottle", "paper", "door"]  >>> for word, idx in enumerate(words):  print("{0}: {1}".format(word, idx)) 0: cup  1: star  2: monkey  3: bottle  4: paper
  ۵: door  >>>

با استفاده از تابع enumerate عنصر لیست را با ایندکس آن چاپ کنیم.

حلقه for  تو  در تو

 

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

>>> nums = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> for i in nums:
for e in i:
print(e, end=' ')
print()
۱ ۲ ۳ 
۴ ۵ ۶ 
۷ ۸ ۹

حلقه for  با zip

>>> words1 = ["cup", "bottle", "table", "rock", "apple"]
 >>> words2 = ["trousers", "nail", "head", "water", "pen"]
 >>>
 for w1, w2 in zip(words1, words2):
 print(w1, w2)

cup trousers bottle nail table head rock water apple pen >>>

حلقه for  و break

برنامه به محض رسیدن  به break از حلقه خارج میشود.

import random
 import itertools
for i in itertools.count():
val = random.randint(1, 30)
print(val)
if (val == 22):
 break
۱۳
 ۸
 ۱۸
 ۶
 ۲۰
 ۲۴
 ۱۳
 ۲۲

 

حلقه for  با continue

برنامه با  شرطی که گذاشتیم وقتی به continue رسید آن را اجرا نمیکند و حلقه کار خود را ادامه میدهد

num = 0
for num in range(20):
num = num + 1
if (num % 2) == 0:
continue
print(num, end=' ')
print()
۱ ۳ ۵ ۷ ۹ ۱۱ ۱۳ ۱۵ ۱۷ ۱۹

کتابخانه های مورد نیاز پردازش تصویر

این  آموزش با پایتون ۲٫۷ هست. کتابخانه های لازم  به صورت زیر میباشد:

Numpy

برای کار با اعداد، آرایه ها و ماتریس ها از این کتابخانه استفاده میشود. در پردازش تصویر، کار با تصاویر هم نوعی کار با ماتریس ها  میباشد.

 برای نصب وارد آدرس C:\Python27\Scripts  میشویم ، کلید شیفت را پایین نگه داشته و در قسمتی خالی از این مکان کلیک راست کرده و گزینه open command را انتخاب میکنیم سپس خط زیر را تایپ میکنیم :

pip install  numpy

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

Matplotlib

برای رسم نمودار ها بیشتر کاربرد دارد. قبل از نصب این کتابخانه اول دو کتابخانه زیر را به عنوان پیش نیاز نصب میکنیم:

pip install python-dateutil
pip install pyparsing
pip install matplotlib

 

opencv

از لینک زیر opencv را دانلود و از حالت فشرده خارج میکنیم. 

https://github.com/opencv/opencv/releases/download/3.3.0/opencv-3.3.0-vc14.exe

وارد مسیر C:\opencv\build\python\2.7\x86 شده و فایل موجود را کپی کرده و در مسیر C:\Python27\Lib\site-packages قرار میدهیم. 

نصب کتابخانه های مورد نیاز پرازش تصویر تموم شد. برای مطمئن شدن از نصب صحیح این کتابخانه ها، وارد شل پایتون شده و آنها را import  میکنیم. نباید خطایی نمایش داده شود. 

cv2

برای اطلاع از نسخه opencv دستور زیر را در شل پایتون وارد کنید:

 


 import cv2
cv2.__version__
 '۳٫۲٫۰'

🆔@image_Process
🌐https://t.me/image_Process

آموزش نصب pip در پایتون

نحوه نصب pip

برای نصب کتابخانه های پایتون با استفاده از  pip، ابتدا وارد سایت https://pip.pypa.io میشویم سپس get-pip.py را دانلود میکنیم. برای نصب مراحل زیر را انجام دهید:

pip
بعد از نصب باید  سیستم  بفهمد که ما pip را نصب کردیم.

pip1
در پایان با نوشتن pip و زدن اینتر تصویر زیر که نمایش دستوراتی برای استفاده از آن هست را میبینید.

pip3
بعد از نصب pip، به راحتی میتوانید کتابخانه های پایتون را از این طریق نصب کنید.

🆔@image_Process
🌐https://t.me/image_Process