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

تصویر چیست؟

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

 

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

پایتون

آموزش پایتون_ تابع 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

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

OpenCV


 اپن سی وی (Open Source Computer Vision Library)، کتابخانه ی  متن باز  بینایی کامپیوتر، تحت مجوز BSD منتشر شده است و از این رو برای استفاده دانشگاهی و تجاری رایگان است.

OpenCV در سال ۱۹۹۹ توسط Gary Bradsky در اینتل بنا نهاده و اولین بار در سال ۲۰۰۰ منتشر شد. در حال حاضر  OpenCV،  بسیاری از الگوریتم های مربوط به بینایی  کامپیوتر و یادگیری ماشین را پشتیبانی می کند و روز به روز گسترش می یابد. OpenCV از طیف گسترده ای از زبان های برنامه نویسی مانند C، Python، Java و غیره پشتیبانی می کند و در سیستم عامل های مختلف از جمله Windows، Linux، OS X، Android و iOS در دسترس است.

OpenCV  برای بهبود محاسبات و برنامه های بی درنگ طراحی شده است .

 

بینایی رایانه‌ای


بینایی رایانه‌ای Computer vision) یا بینایی ماشین ( Machine vision) یکی از شاخه‌های علوم کامپیوتر است که شامل روش‌های مربوط به دستیابی تصاویر، پردازش، آنالیز و درک محتوای آن‌ها است. معمولاً این پردازش‌ها، تصاویر تولید شده در دنیای واقعی را به عنوان ورودی دریافت و داده‌هایی عددی یا سمبلیک را به عنوان خروجی تولید می‌کنند. یکی رویه‌های توسعهٔ این شاخه بر اساس شبیه‌سازی توانایی بینایی انسان در رایانه است.

 

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

python-image-processing

http://innovacion.uas.edu.mx/computer-vision-a-technology-that-looks-into-the-future/?lang=en

The OpenCV Python Interface


OpenCV  یک کتابخانه به زبان  c++،  همراه ماژولهای زیادی که در زمینه بینایی کامپیوتر پوشش دهنده است، میباشد.

OpenCV-Python یک کتابخانه پایتون است که برای حل مشکلات بینایی کامپیوتر طراحی شده است. در واقع  از پایتون به عنوان رابطی برای استفاده از این کتابخانه استفاده میشود. علاوه بر C ++ (و C)، پشتیبانی از پایتون به عنوان یک زبان برنامه نویسی ساده تر از طریق یک رابط پایتون در بالای کد پایه C ++ وجود دارد. در واقع پایتون به عنوان یک اسکریپت بر روی سی ++ سوار میشود. 

پایتون یک زبان برنامه نویسی هدف است که توسط Guido van Rossum طراحی و عمدتا به دلیل سادگی و خوانایی بالا، بسیار محبوب شده است. پایتون، برنامه نویس را قادر می سازد تا ایده هایش را در خطوط کمتری بیان کند. در مقایسه با زبانهایی مانند C++ / C ، پایتون کندتر است.  پایتون،  به راحتی می تواند به وسیله C / C ++ گسترش یابد، و ما را قادر می سازد تا کد C / C ++ را به صورت محاسباتی پرقدرت بنویسیم و پلاگین های پایتون را ایجاد کنیم که می تواند به عنوان ماژول های پایتون استفاده شود.

این  موضوع  دو مزیت دارد:

۱٫ کد پایتون  به اندازه C / C ++سریع  میشود(چون  C ++ واقعی در پس زمینه،  کار می کند) .

۲٫  استفاده از کد پایتون نسبت به C / C ++  آسان تر می شود.

OpenCV-Python از کتابخانه Numpy استفاده می کند که یک کتابخانه بسیار کارآمد برای عملیات عددی با سینتکس  MATLAB است. تمام ساختارهای آرایه OpenCV به آرایه های Numpy تبدیل می شوند. این باعث می شود که ادغام با سایر کتابخانه هایی که از Numpy استفاده می کنند راحت تر باشد  مانند SciPy و Matplotlib.

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

پایتون

if__name__== “__main__ چی هست؟

“__ if __name__ == “__mainچیست؟

 

برای فهم این مطلب به کد زیر توجه کنید:

def main():
     print ("hello world!")
print ("Sufra")
>>>
Sufra
>>>

همانطور که بعد از اجرای کد مشاهده میکنید به جای چاپ هر دو مقدار print فقط sufra چاپ شده است. به این دلیل است که تابع if__name __ ==” __main__  را  فراخوانی نکردیم.

↵ هر ماژول در پایتون ویژگی خاصی  به نام __name__  دارد. وقتی ماژول به عنوان برنامه اصلی اجرا میشود، مقدار ویژگی __name__ در __main__  قرار میگیرد . در غیر این صورت مقدار __name__ حاوی نام ماژول است.

+ وقتی مفسر پایتون کدهای فایل را میخونه تمام کدها را پیدا و اجرا میکنه.

+ وقتی پایتون تمام کد ها را به عنوان برنامه اصلی اجرا میکنه ، متغیر خاص (__name__) را برای مقدار (“__main__”) تنظیم می کند.

+ وقتی تابع اجرا میشود با خواندن عبارت if بررسی میکنه که آیا مقدار __name__ برابر __main__ هست یا نه .
+ + در پایتون، if__name __ ==” __main__  به شما اجازه میدهد هر فایل پایتونی را به عنوان ماژول های قابل استفاده مجدد یا برنامه های مستقل اجرا کنید.

 

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

 __name__= ‘نام ماژول ‘

if statement==false

کد بالا میگه اگر __name__ برابر نام ماژول بود عبارت شرطی ما مقدار false میگیره و اسکریپت داخل _main_   اجرا نمیشود.

t1

 
کد زیر میگه اگر __name__ برابر _main_ بود،  عبارت شرطی ما مقدار true میگیره و اسکریپت داخل _main_   اجرا میشود.
__name__=__main__

if statement == True

 

 

t2
 
 
 
 
 

مثالی دیگر

def main():

W=open(“foo.txt” ,”r”)

K=W.readlines()

for x in K:

print(x)

if __name__ == “__main__”:

main()

22

ماشین حساب ساده با پایتون

کاربرد elif

 

import math
from tkinter import *
from tkinter import messagebox
sufra= Tk()
sufra.configure(background='#FF339F')
sufra.title("ماشين حساب")

def show():
 try: 
 a =asq .get() 
 b = bsq.get()
 o = op.get()
 if o == '+':
 csq = a + b
 messagebox.showinfo("جواب ", csq)
 elif o == '-':
 csq = a - b
 messagebox.showinfo("جواب ", csq)
 elif o == '*':
 csq = a * b
 messagebox.showinfo("جواب", csq)
 elif o == '/':
 csq = a / b
 messagebox.showinfo("جواب", csq) 
 else:
 print('بيشتر')
 except ValueError:
 tkMessageBox.showinfo("خطا!") 
asq=IntVar()
bsq=IntVar()
op=StringVar ()
k= Label(sufra, text="ماشين حساب ساده",background='#FF339F').grid(row=0, column=1)
E1 = Entry(sufra, bd =5,textvariable = asq).grid(row=1, column=0)
L1 = Label(sufra, text="عدد اول ",background='#FF339F').grid(row=1, column=1)
E3 = Entry(sufra, bd =5,textvariable = op).grid(row=2, column=0)
L2 = Label(sufra, text="(*/-+) ",background='#FF339F').grid(row=2, column=1)
E2 = Entry(sufra, bd =5,textvariable = bsq).grid(row=3, column=0)
L3 = Label(sufra, text="عدد دوم ",background='#FF339F').grid(row=3, column=1)

B1 = Button(sufra, text="لطفا حاصل را نمايش بده",background='#FFDA33' ,command = show).grid(row=4, column=0)
sufra.mainloop()

44