<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Reza Seyed Abdollahi</title>
        <link>https://virgool.io/feed/@rezaab1375s</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 12:28:08</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/237630/avatar/5ugbuz.jpg?height=120&amp;width=120</url>
            <title>Reza Seyed Abdollahi</title>
            <link>https://virgool.io/@rezaab1375s</link>
        </image>

                    <item>
                <title>الگوریتم های تنظیم روشنایی و کنتراست تصاویر</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-%D8%AA%D9%86%D8%B8%DB%8C%D9%85-%D8%B1%D9%88%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D9%88-%DA%A9%D9%86%D8%AA%D8%B1%D8%A7%D8%B3%D8%AA-%D8%AA%D8%B5%D8%A7%D9%88%DB%8C%D8%B1-h8rwtm1ektl2</link>
                <description>با رشد بسیار زیاد شبکه های اجتماعی ، تقاضای پردازش تصاویر نیز افزایش یافته است. بیایید دو مورد از الگوریتم های ساده و اصلی پردازش تصویر را بررسی کنیم.1- تنظیم روشنایی (Brightness)برای افزایش روشنایی باید شدت هر پیکسل را ثابت افزایش دهیم و به طور مشابه برای تیره کردن تصویر باید شدت هر پیکسل تصویر را کاهش بدهیم.تصویر اصلیشدت رنگ هر پیکسل می تواند عددی بین 0 تا 255 باشد. در صورتی که پس از افزایش روشنایی ، اگر مقدار شدت رنگ از عدد 255 بیشتر بشود (مثلا +270) مقدار شدت رنگ را به 255 تغییر می دهیم و در صورتی که پس از کاهش روشنایی ، اگر مقدار شدت رنگ از عدد 0 کمتر بشود (مثلا -10) مقدار شدت رنگ را به 0 تغییر می دهیم.نمونه کد تنظیم روشنایی (Brightness) به زبان python با استفاده از کتابخانه pygame https://gist.github.com/SeyedAbdollahi/19f669077dd904dd32da32bc016602e0 روشنایی تصویر با مقدار +60 تنظیم شده استروشنایی تصویر با مقدار -60 تنظیم شده است2- تنظیم کنتراست (Contrast)کنتراست را می توان به زبان ساده به میزان تفاوت بین حداکثر و حداقل شدت پیکسل در یک تصویر تعریف کرد.تصویر اصلیدر اولین قدم ضریب تصحیح کنتراست را به وسیله فرمول زیر بدست می آوریم:F = 259 * (255 + C) / 255 * (259 - C)C = مقدار کنتراستبرای اینکه الگوریتم به درستی عمل کند ، مقدار ضریب تصحیح کنتراست (F) باید به عنوان عدد ممیز شناور ذخیره شود.پس از بدست آوردن مقدار F ، میزان کنتراست را برای رنگ های قرمز ، سبز و آبی در هر پیکسل به صورت جداگانه با استفاده از فرمول زیر محاسبه می کنیم:R’ = F * (R - 128) + 128R = شدت رنگ قرمز (عددی بین 0 تا 255)F = ضریب تصحیح کنتراست (عددی ممیز شناور)همچنین مانند الگوریتم مقدار روشنایی ، در صورتی که شدت رنگ از میزان 255 بیشتر شد به مقدار 255 تغییر می دهیم و در صورتی که شدت رنگ از 0 کمتر شد به 0 تغییر می دهیم.نمونه کد تنظیم کنتراست (Contrast) به زبان python با استفاده از کتابخانه pygame https://gist.github.com/SeyedAbdollahi/dfa78c4e2c406009b549ab127f9ce74b کنتراست تصویر با مقدار +50 تنظیم شده استکنتراست تصویر با مقدار -50 تنظیم شده است</description>
                <category>Reza Seyed Abdollahi</category>
                <author>Reza Seyed Abdollahi</author>
                <pubDate>Sun, 05 Dec 2021 23:30:25 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش نگاتیو کردن عکس با استفاده از pygame</title>
                <link>https://virgool.io/@rezaab1375s/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%86%DA%AF%D8%A7%D8%AA%DB%8C%D9%88-%DA%A9%D8%B1%D8%AF%D9%86-%D8%B9%DA%A9%D8%B3-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-pygame-aa6juj9xefjj</link>
                <description>قبلا که دنیای دیجیتال جهان را فرا نگرفته بود ، عکاسی عالمی داشت انصافا! یکی از تفریحات کودکی تماشای نگاتیو ها بود. چشم ها را ریز می کردیم و با دقت نگاتیو ها را نگاه می کردیم تا شاید بشود آدم های تو عکس که همه مو سفید و ترسناک! شده بودند را تشخیص بدیم.کتابخانه pygame  یک کتابخانه رایگان و متن باز به زبان برنامه نویسی پایتون برای ساخت برنامه های چند رسانه ای و بازی می باشد. طبیعتا کتابخانه ای که برای ساخت بازی استفاده می شود ، قابلیت ویرایش تصاویر نیز دارد.برای استفاده از کتابخانه pygame ابتدا آن را import  می کنیم.import pygameسپس عکس را لود می کنیم و در img ذخیره می کنیم.img = pygame.image.load(&#x27;F:\location\input1.jpg&#x27;)برای نگاتیو کردن عکس ، ما به پیکسل به پیکسل عکسمان احتیاج داریم. هر پیکسل شامل چهار مولفه است که اختصارا آن را RGBA می نامند.مدل رنگی آرجی‌بی ای (َRGBA) برای ایجاد تصویر در صفحه های نمایش به کار گرفته می‌شود. در این مدل، تمام رنگ‌ها از ترکیب سه رنگ تشکیل می‌شود. این سه رنگ عبارت هستند از قرمز (R) (RED) سبز (G) (GREEN) آبی (B) (BLUE) که به آن RGB اطلاق می‌شود. با ترکیب رنگ‌های یادشده که به آن‌ها ابتدایی (Primary) می‌گویند، رنگهای دیگر یا ثانویه (Secondary) ایجاد می‌شود. همچنین مولفه آلفا  (A)(Alpha) میزان شفافیت رنگ را مشخص می کند.مثال RGBAاصولا به عکس نگاتیو شده از عبارت عکس معکوس شده استفاده می کنند. یعنی همه رنگ های آن معکوس شده اند. برای مثال اگر یک پیکسل از عکس دارای مقدار rgb(255, 255, 255) که معادل رنگ سفید باشد ، در مدل نگاتیو شده دارای مقدار rgb(0, 0, 0) که معادل رنگ مشکی می شود.پس ما در pygame باید پیکسل به پیکسل عکسمان را بگیریم و مقدار rgb آن را از عدد 255 کم کنیم و نتیجه را در img ذخیره کنیم.برای گرفتن یک پیکسل از عکس از کتابخانه pygame ، ماژول Surface فراخوانی و از تابع get_at استفاده می کنیم. این خط از کد ما در عکس به سراغ پیکسل شماره (x, y) می رود و یک pygame.Color که شامل اطلاعات rgba است بر می گرداند. color = pygame.Surface.get_at(img, (x,y))حال مقدار rgb که داریم را از 255 کم می کنیم و مجدد در color ذخیره می کنیم:color = pygame.Color(255 - color.r,  255 - color.g,  255 - color.b)ولی مگه نگفتیم نگاتیو معکوس است؟ :) پس بیا به جای قطعه کد بالا از این کد کوتاه استفاده کنیم:color = ~colorسپس پیکسل جدید را در مولفه img جایگزین می کنیم:pygame.Surface.set_at(img, (x,y), color)این کار را برای همه پیکسل های عکس باید انجام بدیم. پس باید مقدار width و height عکس را گرفته و با توجه مقدار آن در حلقه for این کد را اجرا کنیم تا همه پیکسل های عکس نگاتیو یا اصطلاحا معکوس شوند.پس از اینکه همه پیکسل های عکس نگاتیو شدند باید عکس را ذخیره کنیم:pygame.image.save(img, &#x27;F:\location\output.png&#x27;)نمونه کامل کد نگاتیو کردن عکس: https://gist.github.com/SeyedAbdollahi/c4c831b58d25a960a45f6157415cbc26 </description>
                <category>Reza Seyed Abdollahi</category>
                <author>Reza Seyed Abdollahi</author>
                <pubDate>Sat, 27 Nov 2021 23:11:19 +0330</pubDate>
            </item>
                    <item>
                <title>اجرای برنامه flask با استفاده از docker</title>
                <link>https://virgool.io/coderlife/%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-flask-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-docker-mnnxeugboe4s</link>
                <description>فلسک (flask) یک میکرو وب فریم ورک سبک و سریع برای زبان برنامه نویسی پایتون (python) است. از flask بیشتر به عنوان یک api service استفاده می شود. از آنجایی که flask یک میکرو وب فریم ورک است بسیاری از قابلیت های نگاشت شی گرایی ، اعتبار سنجی فرم ها و دیگر ویژگی هایی که در فریم ورک های بزرگ تر مانند جنگو یافت می شوند را ندارد اما در عوض امکان توسعه و گسترش آن توسط افزونه های طرف سوم را دارد.داکر (docker) امکانی را فراهم کرده است که برنامه ها به صورت مجزا در محیطی ایزوله به نام کانتینر (container) راه اندازی شوند. container این امکان را برای توسعه دهندگان فراهم می کند تا یک برنامه را با تمام کتابخانه های وابسته آن به صورت یک پکیج واحد در آورده تا آن را در هر پلتفرم و  سیستم عاملی بدون مشکل و به صورت یکسان اجرا شود.ساخت برنامه flaskیک فایل پایتون (فرمت .py) به نام hello.py می سازیم و کد زیر را در آن وارد می کنیم:from flask import Flask
app = Flask(__name__)

@app.route(&#039;/&#039;)
def hello_world():
    return &#039;Hello, World!&#039;در خط اول ما کلاس Flask را import کردیم.در خط دوم ما یک instance از این کلاس ساخته ایم. نکته: خط اول و دوم باید در همه برنامه های flask باشه :)با استفاده از دستور route به flask می گوییم که با وارد شدن چه آدرس اینترنتی (URL) ، تابع hello_world اجرا بشود.اکنون با وارد کردن دستور flask run باید برنامه flask اجرا شود.خطای نمایش داده شده در ویندوزخطای نمایش داده شده در اوبونتواوه به خطا خوردیم. نگران نباشید :) قبل از دستور run باید به flask ، فایل پایتون خودمان را معرفی کنیم.در سیستم عامل ویندوز بر روی CMD:set FLASK_APP=hello.py2. درسیستم عامل ویندوز بر روی PowerShell:$env:FLASK_APP = &amp;quothello.py&amp;quot3. در سیستم عامل لینوکس ubuntu:export FLASK_APP=hello.pyپس از معرفی کردن فایل پایتون به flask حالا برنامه باید بدون خطا اجرا بشود:اجرای flask در اوبونتوحال flask در حال اجرا است و آدرس 127.0.0.1:5000 که مخصوص لوکال هاست می باشد به صورت اتومات برای برنامه flask در دسترس قرار گرفته است.با مروگر اینترنت آدرس 127.0.0.1:5000 را باز می کنیم و طبق کدی که در hello.py زدیم باید عبارت hello world برگرداند:برگرداندن عبارت hello world توسط flask به مرورگراجرای flask با استفاده از dockerحال میخواهیم flask را در یک container داکر اجرا کنیم. در ابتدا باید یک container بسازیم. هر container از یک image ساخته می شود. در سایت رسمی داکر هاب می توانید انواع مختلف image ها را ببینید و با استفاده از دستور pull (مانند دستورات git) ، فایل image را در سیستم عامل خود دریافت کنید و با استفاده از آن container خود را بسازید.از آنجایی که از flask استفاده می کنیم و flask نیز با زبان python نوشته شده است پس ما نیاز به image پایتون داریم. image رسمی پایتون در سایت داکر هاب موجود و شامل نسخه های بسیاری است. ایمیج رسمی پایتون در سایت داکر هابهر نسخه از image python دارای یک tag می باشد. سه tag از image های پایتون بیشترین استفاده دارد.تگ latest: این tag آخرین نسخه از image پایتون را بدون هیچ کم و کاستی ارائه می دهد. از جمله مزایای این نسخه پایداری بالای آن است و از بزرگ ترین ایرادات آن حجم بالای این image (در حدود 900 مگابایت) است. از آنجایی که کد پایتون ما فقط به flask احتیاج دارد پس ما نیازی نداریم که از این tag پر حجم استفاده کنیم.تگ alpine: این tag بر خلاف tag بالا ، بسیار کم حجم تر (کمتر از 100 مگابایت) می باشد. اما این کم حجمی آن باعث شده که پایداری این image کاسته شود و در مواردی کد پایتون به درستی اجرا نمی شود! همچنین ساخت container از این image نیاز به زمان پردازش بالایی دارد. توسعه دهندگان بیشتر توصیه میکنند فقط در کد های پایتون بسیار ساده از این tag استفاده کنید.تگ slim-buster: این tag دارای حجم متوسط (حدود 170 مگابایت) می باشد اما در عوض پایداری بسیار خوب و سرعت مناسبی دارد. ما از این tag برای container خودمون استفاده می کنیم.با استفاده از دستور زیر image پایتون نسخه slim-buster را دریافت می کنیم:docker pull python:slim-busterنکته: برای دریافت image ها نیاز به تغییر ip دارین. پیشنهاد من استفاده از شکن برای دور زدن تحریم ها است.پس از دریافت image می توانید با دستور docker images آن را مشاهده کنید.اما حتی این image هم نمی تواند برنامه flask ما را اجرا کند! چون نه کتابخانه flask را در خود دارد و نه می داند که برای اجرای flask باید چه دستوری وارد کند. پس ما باید یک image مخصوص برنامه ی flask خودمان بسازیم. برای اینکار از Dockerfile استفاده می کنند.مستندات Dockerfile را می توانید در سایت داکر مشاهده کنید.یک فایل Dockerfile می سازیم و کد های زیر را در آن وارد می کنیم:FROM python:slim-buster
RUN pip install flask --upgrade
COPY hello.py .
CMD export FLASK_APP=hello.py &amp;&amp; flask run --host 0.0.0.0در خط اول گفته ایم که از image پایتون نسخه slim-buster استفاده می کنیم.در خط دوم از pip خواستیم که آخرین نسخه flask را در این image نصب کند. نکته: در پروژه های بزرگ تر بهترین راه این است که ما برنامه پایتون را در یک virtualenv بسازیم و سپس از طریق pip فایل requirements.txt را به Dockerfile بدهیم تا همه پیشنیاز های مورد نیاز را نصب کند. در خط سوم فایل hello.py را وارد image می کند.در خط چهارم دستور معرفی کردن فایل hello.py به flask در ترمینال image اجرا می شود. همچنین دستور flask run اجرا می شود با این تفاوت که اینبار ما از flask خواستیم که در آدرس 0.0.0.0 برای ما برنامه را اجرا کند.حال باید از داکر بخواهیم که یک image اختصاصی با توجه به Dockerfile ما برامون بسازه و  اسم این image را flask-app بزاره:docker build -t flask-app .پس از ساخت image می توانید با دستور docker images آن را مشاهده کنید.حال از داکر می خواهیم که بر اساس image اختصاصی خودمون یک container برای ما بسازه و پورت 5000 container را به سیستم عامل متصل کند.docker run -p 5000:5000 -d flask-appپس از ساخت container می توانید با دستور docker container ls آن را مشاهده کنید.با مروگر اینترنت آدرس 127.0.0.1:5000 را باز می کنیم. این آدرس به container در آدرس 0.0.0.0:5000 متصل است و باعث می شود عبارت hello world از flask که در درون container است به مرورگر ما ارسال شود.برگرداندن عبارت hello world توسط flask داخل container به مرورگر</description>
                <category>Reza Seyed Abdollahi</category>
                <author>Reza Seyed Abdollahi</author>
                <pubDate>Sun, 26 Jul 2020 22:21:52 +0430</pubDate>
            </item>
            </channel>
</rss>