اطلاعیه

Collapse
No announcement yet.

آموزش پردازش تصویر در VB.NET

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    آموزش پردازش تصویر در VB.NET

    سلام دوستان
    من فقط زبان vb.net بلدم و می بینم همه با زبان Basic راحتترن برای کار کردنن، منم داخل آدرس زیر
    http://www.eca.ir/forum2/index.php?topic=61335.0
    دیدم آقای EhsanHejazi دارن با C#پردازش تصویر کار می کنن منم کدها رو می خونم رو با تجربه داخل زبان vb.net براتون تبدیل به بیسیک تا هم من بهتر و بیشتر پردازش تصویر رو یاد بگیرم و هم با تجربیات شما و خودم بتونیم بهترین قسمت برای آموزش برای دیگر کاربرا ایجاد کنیم.


    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

    #2
    پاسخ : آموزش پردازش تصویر در VB.NET

    جلسه اول لود کردن فایل های تصویر در vb.NET
    می دونیم داخل ویژوال استودیو و تمامی زبان های پشتیبانی مهمترین فاکتور قابلیت و پشتیبانی از شی گرایی در این کامپایلر هست و چون زبان vb.net نسبت به vb6 خیلی شی گرا شد منم بر اساس شی گرا شروع می کنم و توضیح می دم
    برای ایجاد یک شی می تونیم مثل تعریف متغییر شروع کنیم(مثلا می خوایم یه متغییر از کلاس bitmap تعریف کنیم)

    dim ax as bitmap

    حالا برای درست کردن یه شی از همون کلاس و مقدار دهی باید از دستور new استفاده کنیم

    ax=new bitmap(address)

    که باید به جای address آدرس محل تصویر عکس رو به همراه پسوند عکس قرار بدین
    مثلا
    d:\ax.bmp

    البته دستور بالا رو هم می شد داخل یه خط نوشت

    dim ax as new bitmap(address)

    این تعریف کلاس bitmap بود حالا باید شروع کنیم به کارکرد عملی

    برنامه
    Visual stduio
    رو باز کنید و یه پروژه windows form application رو انتخاب و ایجاد کنین
    یه دکمه روی فرم قرار بدین
    Button
    و یه کنترول
    Picturebox
    مثل تصویر زیر


    حالا روی دکمه کلیک کنین تا قسمت کد نویسی باز بشه حالا اینجا این کد رو بنویسین
    کد:
        Dim ax As New Bitmap("d:\1.BMP")
        PictureBox1.Image = ax
    حالا دکمه f5 رو کلیک کنین و روی دکمه کلیک کنین

    بله عکس 1.bmp که داخل درایور d هست رو نشان داد


    برای تغییر ادرس عکس محل d:\1.BMP رو تغییر بدین


    دوستان عکسا شاید پاک بشن اونم بابت اینکه روی سرورهای مجانی هست کسایی که اکانت فعال دارن لطفا پلود روی سرور همین سایت کنن و عکسها رو تغییر بدن تا همه افرادی که حتی بعدها می یان یاد بگیرن

    من کتاب گنزالس هم می گیرم تا توضیحات بعدی هم با آقای EhsanHejaz تمامی علمی و طبق تمرینا یا توضیحات کتاب باشه و دوستان رو گمراه نکنم
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

    دیدگاه


      #3
      پاسخ : آموزش پردازش تصویر در VB.NET

      جلسه دوم آموزش کار با پیسکل ها

      برنامه بالا رو برای تغییرات کلی به صورت زیر تغییر بدین
      شی ax رو به صورت گلوبال تعریف کنین یعنی اینجوری

      Public Class Form1
      Dim ax As New Bitmap("d:\1.BMP&quot
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

      PictureBox1.Image = ax

      End Sub

      حالا یه دکمه دیگه هم به فرم اضافه کنین

      می خوایم مقدار پیکسلهای عکس رو بدست بیاریم بدین منظور ابتدا از شی ax از خاصیت getpixel استفاده می کنیم
      این متد دو پارامتر داره یکی x و دیگری y حالا مثلا می خوام داخل عکس مقدار پیکسل در مختصات 10 و 10 رو بدست بیاریم و چاپ کنیم دستور زیر رو می نویسیم
      عبارت msgbox هر چیزی که داخل پرانتزش باشه به صورت یه پیغام به کاربر نمایش می ده
      MsgBox(ax.GetPixel(10, 10).ToString)

      اون عبارت .tostring هم بابت این گذاشتم که چون باید پارامتر ورودی msgbox یعنی ax باید به صورت رشته باشد منم با این کارم ابتدا مقدار پیکسل رو به دست آوردم و نهایتا رشته و اون رو چاپ کردم پس کل برنامه به صورت زیر هست

      کد:
      Public Class Form1
        Dim ax As New Bitmap("d:\1.BMP")
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      
          PictureBox1.Image = ax
      
        End Sub
      
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
          MsgBox(ax.GetPixel(10, 10).ToString)
      
        End Sub
      End Class
      حالا با کلیک بر روی دکمه اول عکس نمایش و با دکمه بعدی مقدار پیکسل رو نمایش می ده



      که حروف به ترتیب بیانگر
      R=Red
      G=Green
      B=Blue
      هستن

      که برای دسترسی به هر کدام از این مقدار ها می تونید از کلاس getpixel متد r , b,g رو فراخوانی کنین به صورت زیر

      Dim r As Byte = ax.GetPixel(10, 10).R
      Dim g As Byte = ax.GetPixel(10, 10).G
      Dim b As Byte = ax.GetPixel(10, 10).B

      حالا هر کدام از متغییر ها همون مقدارهای Red ، Green , Blue هستن
      هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

      دیدگاه


        #4
        پاسخ : آموزش پردازش تصویر در VB.NET

        جلسه سوم:
        پیمایش عکس

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

        محور افقی را width و محور عمودی را height می گیم بنابراین می تونیم با استفاده از دو حلقه و گرفتن دو خصوصیت اشاره شده کل عکس رو اسکن کنیم
        برای داشتن محور افقی و عمودی به ترتیب از دستورهای زیر استفاده می کنیم

        dim wid as integer=ax.Width - 1
        dim hei as integer=ax.Height - 1

        حالا که مقدارها رو داریم باید از اولین مکان که مکان 0 هست تا ماکزیمم مقدار متغییرها پیمایش کنیم
        دو متغییر دیگه تعریف می کنیم به اسم x , y

        dim x as integer
        dim y as integer

        حالا حلقه ها

        for x=0 to wid
        for y=0 to hei


        next
        next

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

        این عکس رو روی کامپیوتر خودتون ذخیره کنین


        این عکس رو به اسم 2 تغییر نام بدین و بزارین داخل درایور D
        یه دکمه تعریف کنین و اینها رو داخلش بنویسین

        کد:
            Dim r As Byte
            Dim g As Byte
            Dim b As Byte
        
            Dim s As String = ""
        
        
            For x = 0 To ax.Width - 1
              For y = 0 To ax.Height - 1
                r = ax.GetPixel(x, y).R
                g = ax.GetPixel(x, y).G
                b = ax.GetPixel(x, y).B
                If r = 255 AndAlso b = 255 AndAlso g = 255 Then
                  s = s + "@"
                Else
                  s = s + "-"
                End If
              Next
              s = s & vbCrLf
            Next
        
        
            Dim ne As New StreamWriter("d:\result.txt")
            ne.Write(s)
            ne.Close()
            MsgBox("Finished")
        ابتدا برنامه قبل از Public Class Form1
        عبارت زیر رو بنویسین
        Imports System.IO
        یعنی به این صورت ابتدای برنامه هست

        Imports System.IO
        Public Class Form1
        Dim ax As New Bitmap("d:\2.BMP&quot


        برنامه رو اجرا و دکمه رو کلیک کنین تا عبارت finished رو ببینین حالا برین سراغ درایو D و فایل Result رو ببینین

        اگر خوشتون امد با تشکرها ما رو خوشحال کنین :wow:

        توضیح برنامه

        اینجا که فقط تعریف متغییر هست

        Dim r As Byte
        Dim g As Byte
        Dim b As Byte

        Dim s As String = ""
        پیمایش کل عکس با این دو حلقه


        For x = 0 To ax.Width - 1
        For y = 0 To ax.Height - 1

        مقدار red ,green,blue هر پیکسل رو بدست می یاریم
        r = ax.GetPixel(x, y).R
        g = ax.GetPixel(x, y).G
        b = ax.GetPixel(x, y).B
        در صورتی که این پیکسل سیاه باشد
        If r = 255 AndAlso b = 255 AndAlso g = 255 Then
        و در انتها هم درست کردن فایل و نوشتن متغییر s داخل فایل



        Dim ne As New StreamWriter("d:\result.txt&quot
        ne.Write(s)
        ne.Close()
        MsgBox("Finished&quot


        هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

        دیدگاه


          #5
          پاسخ : آموزش پردازش تصویر در VB.NET

          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

          دیدگاه


            #6
            پاسخ : آموزش پردازش تصویر در VB.NET

            سلام
            جلسه چهارم تغییر رنگ پیکسلها:
            پیکسل های عکسها از سه رنگ اصلی تشکیل شدن که اصصلاحا می گن RGB که مخفف رنگ های قرمز سبز و آبی هستن و بقه رنگها رو از طریق مخلوط این سه رنگ می سازیم هر رنگ نیز عددی بین 0 تا 255 رو به خودش اختصاص می ده یا به عبارت بهتری یه بایت که جمعا ما سه بایت برای نمایش یه رنگ داریم.برای ساختن یه رنگ از سه عدد از دستور
            Color.FromArgb(r, g, b)
            استفاده می کنیم که جای r , b, g مقدار عددی رنگها رو قرار می دیم.
            حالا فرض کنیم که می خوایم کاری کنیم که فقط رنگهای قرمز یک عکس نشون داده بشن پس مراحل زیر رو دنبال می کنیم
            این عکس رو ببینید

            حالا عکس رو به اسم 3 داخل درایو دی تون ذخیره کنین


            این کد رو قرار بدین


            Public Class Form1
            Dim ax As New Bitmap("d:\3.jpg&quot
            Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim c As Color = ax.GetPixel(10, 10)



            PictureBox1.Image = ax

            End Sub

            Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click



            Dim r As Byte
            Dim g As Byte
            Dim b As Byte



            For y = 0 To ax.Height - 1
            For x = 0 To ax.Width - 1
            r = ax.GetPixel(x, y).R
            b = ax.GetPixel(x, y).B
            g = ax.GetPixel(x, y).G
            ax.SetPixel(x, y, Color.FromArgb(r, 0, 0))
            Next
            Next

            PictureBox1.Image = ax


            End Sub
            End Class


            کد همون کد سابق هست که فقط تابع دکمه 2 به صورت زیر تغییر پیدا کرده


            Dim r As Byte
            Dim g As Byte
            Dim b As Byte



            For y = 0 To ax.Height - 1
            For x = 0 To ax.Width - 1
            r = ax.GetPixel(x, y).R
            b = ax.GetPixel(x, y).B
            g = ax.GetPixel(x, y).G
            ax.SetPixel(x, y, Color.FromArgb(r, 0, 0))
            Next
            Next

            PictureBox1.Image = ax

            داخل تابع ما مقدار هر یک از رنگهای یک پیکسل رو دریافت می کنیم و داخل متغییر های r,g,b قرار می دیم و سپس برای تهیه یه رنگ جدید مقدار g,b رو صفر می زاریم و فقط با مقدار رنگ پیسکل به دست آمده به تغییر رنگ همون پیکسل با دستور
            ax.SetPixel(x, y, Color.FromArgb(r, 0, 0))
            اقدام می کنیم حالا خروجی به صورت زیر هست


            خوب تا اینجا تغییر رنگها رو یادگرفتیم و فهمیدم که با تغییر دادن هر یک از آرگومان های تابع FromArgb می تونیم یه رنگ RGB با تابع اشاره شده بسازیم.حالتی داریم برای رنگها که جالب هست که اگر از منفی مقدار پیکسل رنگ به دست آمده ، عدد 255 رو باهاش جمع کنیم رنگ به صورت ترکیب رنگهای ابتدایی متمایل به سیاه رو بدست می یاریم که اصطلاحا می گن عکس رو نگاتیوی کردن
            پس فقط اگر از عدد 255 مقدار پیکسل همون رنگ رو عوض کنیم عکس نگاتیوی می شه پس داخل تابع بالا این دستور رو تغییر می دیم
            ax.SetPixel(x, y, Color.FromArgb(255-r, 255-g, 255-b))

            خروجی برنامه

            هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

            دیدگاه


              #7
              پاسخ : آموزش پردازش تصویر در VB.NET

              سلام
              واقعا دمت گرم
              این اولین آموزشی که اینقدر خوب و عملی توضیح داده شده
              خواهشا ادامه بده قطعش نکنی ها
              موفق باشی

              دیدگاه


                #8
                پاسخ : آموزش پردازش تصویر در VB.NET

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

                r = ax.GetPixel(x, y).R
                b = ax.GetPixel(x, y).B
                g = ax.GetPixel(x, y).G

                حالا هر کدام از این رنگها رو می تونیم به عنوان مبنای مقایسه در نظر بگیریم و با استفاده از شرط اون رو مقایسه کنیم(مد نظر داشته باشین که هر کدام از این مبناها می تونه رنگ رو با توجه به عکس و نوع رنگهای کار رفته به سیاه و سفید مختلفی تبدیل کنه)

                یه دکمه تعریف کنین و این کد رو داخلش قرار بدین
                کد:
                    Dim r As Byte
                    Dim g As Byte
                    Dim b As Byte
                
                
                
                    For y = 0 To ax.Height - 1
                      For x = 0 To ax.Width - 1
                        r = ax.GetPixel(x, y).R
                        b = ax.GetPixel(x, y).B
                        g = ax.GetPixel(x, y).G
                        If r > 127 Then
                          ax.SetPixel(x, y, Color.FromArgb(255, 255, 255))
                        Else
                          ax.SetPixel(x, y, Color.FromArgb(0, 0, 0))
                        End If
                
                      Next
                    Next
                
                    PictureBox1.Image = ax
                اینجا که می بینین من با مبنای مقایسه رو رنگ قرمز پیسکل مد نظر قرار دادم پس شکل خروجی به صورت زیر در آمد
                شرطمون هم اینو می گه
                If r > 127 Then
                ax.SetPixel(x, y, Color.FromArgb(255, 255, 255))
                Else
                ax.SetPixel(x, y, Color.FromArgb(0, 0, 0))
                End If
                اگر بیشتر از نصف بود رنگ روشن و اگر کمتر رنگ سیاه رو برای پیسکل ست کنه
                خروجی:


                حالا اگر مبنا رنگ آبی باشه
                شرط برنامه

                If b > 127 Then
                ax.SetPixel(x, y, Color.FromArgb(255, 255, 255))
                Else
                ax.SetPixel(x, y, Color.FromArgb(0, 0, 0))
                End If

                خروجی



                این حرفا رو طبق مطالعاتم و تحقیقاتم در مورد فایل های بیت مپ میگم
                خروجی رنگها که همان عدد های رنگها قرمز و آبی و سبز هستند (طبق توضیحات http://en.wikipedia.org/wiki/BMP_file_format) عددی در بازه مثبت هستن(برای عکسهایی با فرمت bitmap) پس با روش آقای EhsanHejazi که با شرط بزرگتر از 255 یا کوچکتر صفر نمی شه فیلتر روشن رو اعمال کرد(چون عدد منفی نداریم و همچین عددمون از 255 بیشتر نمی شه) و شما باید به پیسکل مورد نظرتون رنگتون رو با دادن عدد یا با شرط به وسیله جمع ، ضرب و تقسیم و ... پیکسلتون رو در محدود مجاز بسازین کد زیر رو ببینین
                If r < 245 Then r = r + 10
                If g< 245 Then g = g + 10
                If b< 245 Then b = b + 10
                در شرط بالا اگر مقدار رنگ پیسکل ها از عدد 245 کمتر بود(یعنی 10 تا تا ماکزیمم 255 اختلاف داره) به پیسکل ها عدد 10 رو اضافه می کنه و رنگ رو روشن تر می کنه حالا خروجی برنامه رو نسب به عکس قبلی ببینین می بینید روشن تر شده .برنامه کلی
                کد:
                  Dim r As Byte
                    Dim g As Byte
                    Dim b As Byte
                
                
                
                    For y = 0 To ax.Height - 1
                      For x = 0 To ax.Width - 1
                        r = ax.GetPixel(x, y).R
                        b = ax.GetPixel(x, y).B
                        g = ax.GetPixel(x, y).G
                
                        If r < 245 Then r = r + 10
                        If g < 245 Then g = g + 10
                        If b < 245 Then b = b + 10
                        
                
                        ax.SetPixel(x, y, Color.FromArgb(r, g, b))
                
                      Next
                    Next
                
                    PictureBox1.Image = ax
                هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                دیدگاه


                  #9
                  پاسخ : آموزش پردازش تصویر در VB.NET

                  سلام دوستان
                  اگر عکس ها رو نمی بینید بدلیل این هست که سرور پلودی چون مجانی هست عکس ها یه روز می پره روز دیگه شاید نشون داده بشه.من براتون همهگی عکس ها رو روی یه سرور دیگه پلود کردم.کاش سایت هم پلود عکس فعال برای کاربران معمولی هم داشت یا دوستان کمک می کردن.

                  تصاویر:






                  هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                  دیدگاه


                    #10
                    پاسخ : آموزش پردازش تصویر در VB.NET

                    baby_1 با تشکر از زحماتت
                    مباحث پردازش تصویر اینها - مطالبی که در بالا عنوان شده - نیستن بهتره یکم با متلب پردازش تصویر کار کنید تا مباحث اصلی پردازش تصویر رو ببینید .
                    تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
                    داشتن عقله زيادتر از دیگر آدم ها است

                    دیدگاه


                      #11
                      پاسخ : آموزش پردازش تصویر در VB.NET

                      مباحث پردازش تصویر اینها - مطالبی که در بالا عنوان شده - نیستن بهتره یکم با متلب پردازش تصویر کار کنید تا مباحث اصلی پردازش تصویر رو ببینید .
                      سلام دوست من aliila
                      من بر خلاف اکثریت که از توابع آماده مطلب استفاده می کنن می خوام پردازش تصویر رو از بیت به بیت تصاویر شروع کنم و تا چهره شناسایی و ... پیش ببرم.طبق مطالب خوانده شده داخل کتاب های پردازش دیجیتال تصویر گنزالس و همچنین کتاب Image Processing in C متوجه شدم که واقعا برنامه نویسی پردازش تصویر یعنی چی.
                      برای همین منظور ابتدا به پیسکل ها بحث می کنم و سعی می کنم با مطالب دوستمون آقای EhsanHejazi جلو بیام که قسمتی از سطوح ابتدایی جا نمونه و کاربرای سطح مبتدی رو به ابتدای برنامه نویسی اصلی وارد کنیم.در جلسات آینده خواهین دید که با همین موضوعات ساده و پیش پا افتاده و بدون بهره گیری از توابع و کلاس های آماده از تصویر مشتق گرفته ، لبه ها رو شناسایی کرده ، اعداد را از تصاویر بازیابی و ... انجام خواهد گرفت.

                      اگر کمکی در رابطه با بهتر شدن و همچنین بالابردن سطوح آموزشی و همچنین گرفتن مشکلات توضیحی و برنامه نویسی کنین مشتاقانه و از صمیم قلب از لطف و کمکاتون متشکر می شم.


                      هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                      دیدگاه


                        #12
                        پاسخ : آموزش پردازش تصویر در VB.NET

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

                        دیدگاه


                          #13
                          پاسخ : آموزش پردازش تصویر در VB.NET

                          سلام
                          اگر اکثر جاها توجه کرده باشین ما قصد داریم روی عکسمون قسمتی رو مشخص کنیم تا بیننده رو روی آن قسمت خیره کنیم و به نحوی جلب توجه کنیم یا بعضی از مواقع مثلا داخل سیستم های امنیتی می یان کدهای امنیتی رو روی تصاویر چاپ می کنن تا کاربر با وارد کردنشون نشون بده که انسان هست و روبات و ... نیست یا داخل پردازش تصویر برای مشخص کردن صورت افراد مربعی دور صورتشون می کشیم
                          برای ترسیم اشکال ما باید چند مرحله رو پشت سر بزاریم که به ترتیب زیر هستن
                          برای ترسیم و رسم نوشته به صورت عکس باید ابتدا از کلاس Graphics یه نمونه تعریف کنیم من اسم این نمونه رو img می زارم(این مثل این می مونه که داریم بوم نقاشی رو تعیین می کنیم )
                          Dim img As Graphics
                          برای کشیدن اشکال مثل کشیدن نقاشی باید قلم رو مشخص کنیم بنابراین یه شی از کلاس pen می سازیم که به نحوی بیانگر رنگ و تعیین ضخامت قلم هست
                          Dim pen1 As New Pen(Brushes.Blue, 3)
                          رنگ قلم رو آبی و ضخامتش رو 3 در نظر گرفتیم که این دو مقدار رو می تونین خودتون به مقدارهای مورد نظر تغییر بدین

                          حالا بعد از تعریف این دو مقدار باید آستین ها رو بالا بزنیم بریم به خواستگاری نقاشیمون :wow:

                          پس حالا می گیم که بوم نقاشیمون کجاست و مربوط به چی می شه .داخل توضیحات قبلی که دنبال کردین فهمیدیم که متغییر ax محتوی عکس داخل حافظه کامپیوتر هست پس بوم رو مربوط به این متغییر می کنیم
                          img = Graphics.FromImage(ax)

                          حالا می رسیم به نقاشی و خط خطی کردن :nice:

                          چند تا متد اولیه و مهم رو تعریف می کنم و بقیه هم خودتون می تونین با کار با بقیه متدها اشکال و دیگر ترسیمات رو انجام بدین این متدها مربوط به بوم نقاشیمون می شن

                          متد DrawRectangle:
                          با این متد می شه یه مستطیل رو رسم کرد اولین آرگومان قلم نقاشی رو مشخص می کنه ، دومین آرگومان مکان شروع بر حسب ایکس ، سومین آرگومان مکان شروع بر حسب وای ، سومین و چهارمین آرگومان عرض و ارتفاع بعد از مکان اولیه رو مشخص می کنه

                          متد DrawLine:
                          برای رسم خط به کار می رود
                          آرگومان ها به ترتیب
                          1:قلم
                          2:مکان شروع بر حسب point (پس باید یه شی از این کلاس تعریف کنیم)
                          3:مکان خاتمه بر حسب point(پس باید یه شی از این کلاس تعریف کنیم)

                          متد DrawString
                          برای نوشتن یه عبارت به کار می رود
                          آرگومان ها
                          1:متن
                          2:فونت بر حسب font (پس باید یه شی از این کلاس تعریف کنیم)
                          3:نوع براش (مثل قلم می مونه که در اینجا به نحوی بیانگر رنگ نوشته هست)
                          4:مکان بر حسب کلاس PointF(پس باید یه شی از این کلاس تعریف کنیم)

                          خوب حالا شروع برنامه نویسی
                          یه دکمه جدید ایجاد می کنیم و قصد می کنیم که یه مستطیل با قلم از قبل تعریف کرده بکشیم که از نقطه 20و20 شروع کنه و عرضی با مقدار 100 و ارتفاعی با مقدار 100 روی تصویرمون ایجاد کنیم
                          پس کد اصلی:
                          Dim img As Graphics
                          Dim pen1 As New Pen(Brushes.Blue, 3)
                          img = Graphics.FromImage(ax)
                          img.DrawRectangle(pen1, 20, 20, 100, 100)
                          PictureBox1.Image = ax

                          حالا اجرا برنامه:



                          رسم یه خط
                          Dim img As Graphics
                          Dim pen1 As New Pen(Brushes.Blue, 3)
                          img = Graphics.FromImage(ax)
                          img.DrawLine(pen1, New Point(300, 300), New Point(30, 30))




                          و یا یه مستطیل و یه نوشته داخل مستطیل
                          Dim img As Graphics
                          Dim pen1 As New Pen(Brushes.Blue, 3)
                          img = Graphics.FromImage(ax)
                          img.DrawRectangle(pen1, 20, 20, 100, 100)

                          img.DrawString("Baby", New Font("Tahoma", 10), Brushes.Teal, New PointF(30, 30))
                          PictureBox1.Image = ax




                          اگر دیده باشین حین رسم نوشته ما از این عبارت نیز استفاده کردیم
                          New Font("Tahoma", 10)
                          من فونت رو از نوع Tahoma و سایزش رو 10 در نظر گرفتم و چون باید یه شی می ساختم به جای تعریف یه متغییر در همون لحظه از عبارت new و سپس نام کلاس استفاده کردم و یه جا مراحل رو انجام دادم

                          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                          دیدگاه


                            #14
                            پاسخ : آموزش پردازش تصویر در VB.NET

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

                            دیدگاه


                              #15
                              پاسخ : آموزش پردازش تصویر در VB.NET

                              سلام
                              هم روی کامپیوتر می شه استفاده کرد هم روی میکرو .روی میکرو هم به چند صورت
                              در بعضی از بردهای آموزشی یا بهتر بگم مادر بوردهایی که روشون سیستم عامل نصب می شه میان پلت فرم دات نت رو نصب می کنن و برنامه نوشته شده روی کامپیوتر رو منتقل می کنن روی برد تا تراشه براشون چنین کارهایی انجام بده.
                              اگر با زبان basic یا c برای میکرو برنامه نویسی می کنین(منظور میکروهای 8 بیتی یا 16 بیتی هست) اگر شد و وقت شد پردازش بیت به بیت یه عکس هم براتون توضیح می دم به صورتی که شما عکس رو بگیرین و ساده ترین فیلتر ها رو روش پیاده سازی کنین یا قسمتی از عکس رو بگیرین و ذخیره و پردازش کنین(البته هر چند با سرعت کمتر)
                              این قسمت آخری که چه جوری بیت به بیت پردازش کنین رو وقت توضیح دادن بیشتر توضیح می دم تا بفهیمن چه جوری یه فایل واقعا عکس هست یا نه یا بیت در فلان قسمت از عکس به چه معناست .برای راحتی این قسمت رو هم با کلاس های رشته ای فایل ها بررسی می کنم که چه جوری بایت به بایت عکس رو بخونین و مقدار بایتیش رو پردازش کنین
                              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                              دیدگاه

                              لطفا صبر کنید...
                              X