اطلاعیه

Collapse
No announcement yet.

مشکل در for تودرتو؟

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

    مشکل در for تودرتو؟

    سلام
    سوال اصلی:ساختار for های تودرتوی من در برنامه زیر درسه؟
    من بردم عکس می گیره و روی پورت سریال قرار میده وعکس رو با دستور زیر میگیره
    fprintf(obj,'DF&quot
    DF دستور گرفتن عکس از برد
    میخواسم بدونم می تونم با استفاده از for تودرتو این عکس رو بریزم توی ماتریس مانند زیر

    img=imread('rice.png'

    img=double(img);

    [m n]=size(img);

    img2=zeros(m,n);
    s=serial('COM3&#039
    >> fopen(s)
    >> fprintf(s,'DF&#039
    for i=1:m
    for j=1:n
    D=0;
    D=fscanf(s);
    c=str2num(D);
    img2(i,j)=c;
    end
    end
    ***********
    for i=1:m
    for j=1:n
    D=0;
    D=fread(s,1,'int8'
    img2(i,j)=D;
    end
    end
    درضمن عکس rice رو برای تعیین اندازه m,n گذاشتم
    در ضمن بعد از نوشتن for تودرتو خطای زیر رو میده؟

    error: Subscripted assignment dimension mismatch

    #2
    پاسخ : مشکل در for تودرتو؟


    salam

    bebakhshid keyboardam farsi nadare! :cry:

    morede aval inke matrise ye aaks png 3D has mamulan, bebin m n doros khunde mishe

    boud rate port serial ro moshakhas nakardi
    motmaeni dasturet be board mirese?


    felan hamina be zehnam mirese
    پشت به کنکور ، رو به سربازی...

    دیدگاه


      #3
      پاسخ : مشکل در for تودرتو؟

      منظورت از جمله زیر چیه؟
      morede aval inke matrise ye aaks png 3D has mamulan
      در ضمن دستور serial('COM3&#039l رو که میزنم و enter خودش boudrate ور میزنه 9600
      آره چون یه led که نشون دهنده رسیدنش هس روشن میشه

      دیدگاه


        #4
        پاسخ : مشکل در for تودرتو؟

        رنگا هر کودوم تو یه طبقه از ماتریس ذخیره می شن. سایز ماتریس این جوری میشه مثلا
        sizeIMG=[100 100 3] البته نه تو همه ی فرمتا ( و ساب فرمتا)
        نگا کن ببین تا قبل از ارور دیمنشن میسمچ چنتا درایه رو میخونه؟

        من پیشنهاد میکنم اول یه برنامه دامی تست :mrgreen: بنویس که مطمئن شی دیتا (در دو طرف) درست میرسه.
        پشت به کنکور ، رو به سربازی...

        دیدگاه


          #5
          پاسخ : مشکل در for تودرتو؟

          ممنون از جوابتون
          من زیاد با متلب کار نکردم
          میشه منظورتون از اینکه (رنگا هر کودوم تو یه طبقه از ماتریس ذخیره می شن.) چیه؟مثلا قرمز طبقه اول؟یعنی چی؟
          میشه در مورد دستور sizeIMG=[100 100 3] هم توضیح بدین؟
          اگه ماتریس تعریف کنم هیچی درایه نمی خونه و وقتی دستور [m n]=size(obj) رو بعد از باز کردن پورت و گرفتن عکس میزنم اندازه ماتریس رو 1*1 مینویسه
          و وقتی با دستورات for پایین فراخونی میکنم یه ارور میده مث زیر:
          too many parametrs ... بقیش یادم نی
          وقتی ماتریس فراخونی میکینم هیچی درایه نمی خونه و فقط ارور میده ولی وقتی ارایه تعریف می کنم512 تا عدد می خونه که آرایه های عکسه ولی عکس خیلی بزرگتر از این حرفاس ولی بیشتر از این نمی خونه چرا؟
          توی workspace دیدم buffer inputsize , bufferoutputsize رو 512 قرار داده بود نتونسم عوضش کنم؟
          چیکار کنم هم این بافر یا ارایم بیشتر عدد بگیره هم عکس رو با ماتریس فراخونی کنم نه آرایه؟
          ممنون

          دیدگاه


            #6
            پاسخ : مشکل در for تودرتو؟

            سلام
            مشکل بالا حل شد
            یه مشکل دیگه دارم
            دستور for زیر مثلا یه بار میاد با k=1 درایه اول رو می خونه بعد با k=2 درایه اول و دوم رو می خونه بعد با k=3 درایه اول تا 3 رو می خونه و..... با k=1000 درایه اول تا هزار رو می خونه
            من for رو چجوری تعریف کنم که فقط یه بار درایه 1 تا 1000 رو بخونه و دیگه برای k=1 تا k=999 اینکارو تکرار نکنه؟
            ممنون

            دیدگاه


              #7
              پاسخ : مشکل در for تودرتو؟

              نوشته اصلی توسط rreyhanehh
              چیکار کنم هم این بافر یا ارایم بیشتر عدد بگیره هم عکس رو با ماتریس فراخونی کنم نه آرایه؟
              نمیدونم کودوماش حل شد کودوماش حل نشد؟! oo: منظورت ازین جمله چی بود؟ oo: متلب همه چیو ماتریسی میبینه (البته غیر syms و math و ... )

              نوشته اصلی توسط rreyhanehh
              سلام
              مشکل بالا حل شد
              یه مشکل دیگه دارم
              دستور for زیر مثلا یه بار میاد با k=1 درایه اول رو می خونه بعد با k=2 درایه اول و دوم رو می خونه بعد با k=3 درایه اول تا 3 رو می خونه و..... با k=1000 درایه اول تا هزار رو می خونه
              من for رو چجوری تعریف کنم که فقط یه بار درایه 1 تا 1000 رو بخونه و دیگه برای k=1 تا k=999 اینکارو تکرار نکنه؟
              ممنون
              کودوم زیر؟ oo: یه حلقه ی for خالی کاری رو که شما میخوای می کنه.
              پشت به کنکور ، رو به سربازی...

              دیدگاه


                #8
                پاسخ : مشکل در for تودرتو؟

                من وقتی دستور زیر رو می نویسم
                for(k=1:1000
                k
                c=fread
                a(k)=c
                end
                یه بار میاد با k=1 درایه اول رو می خونه بعد با k=2 درایه اول و دوم رو می خونه بعد با k=3 درایه اول تا 3 رو می خونه و..... با k=1000 درایه اول تا هزار رو می خونه
                در صورتیکه من می خوام
                فقط یه بار درایه 1 تا 1000 رو بخونه و دیگه برای k=1 تا k=999 اینکارو تکرار نکنه؟
                این واضحه؟
                نیس؟

                دیدگاه


                  #9
                  پاسخ : مشکل در for تودرتو؟

                  محتویات این پست به دلیل کاملا بی ربط بودن حذف شد :mrgreen:

                  1 ساعت نشستم برات fread خوندن فایلو توضیح دادم

                  فردا نگا میکنم ببینم چه میشه کرد ... (:| I-)
                  پشت به کنکور ، رو به سربازی...

                  دیدگاه


                    #10
                    پاسخ : مشکل در for تودرتو؟

                    :sad:
                    ببخشید
                    عکسایی که میگیره فقط ساه خالص داره و سفید خالص
                    و double هم هس چیکار کنم رنگدی باشه؟

                    دیدگاه


                      #11
                      پاسخ : مشکل در for تودرتو؟

                      سلام

                      نوشته اصلی توسط rreyhanehh
                      من وقتی دستور زیر رو می نویسم
                      for(k=1:1000
                      k
                      c=fread
                      a(k)=c
                      end

                      این واضحه؟
                      نیس؟
                      شما اگه میخوای یه بایت یه بایت بخونی هر سری fread فقط باید 1 بیتو بخونه نه k تا. البته راه راحتتر اینه هر 1000 تاشو یه جا با fread بخونیو نتیجه رو بریزی رو a

                      نوشته اصلی توسط rreyhanehh
                      :sad:
                      ببخشید
                      عکسایی که میگیره فقط ساه خالص داره و سفید خالص
                      و double هم هس چیکار کنم رنگدی باشه؟
                      متغیر عکسا باید uint8 باشه! با double کار نمیکنه
                      پشت به کنکور ، رو به سربازی...

                      دیدگاه


                        #12
                        پاسخ : مشکل در for تودرتو؟

                        چجوری 1000تا رو باهم بخونم؟
                        یعنی در دستور fread(s,1,'int8&#039l به جای یک 1000 بذارم حله؟
                        خود برنامه با double عکسو فراخونی می کنه بعد که به uint8 تبدیلش میکنم باز فقط نقاط سفید و سیاه داره

                        دیدگاه


                          #13
                          پاسخ : مشکل در for تودرتو؟

                          سلام
                          آقا هلپ متلب خیلی کامله من 99% چیزایی که یاد گرفتم از هلپشه

                          تو هلپ serial.fread رو سرچ کن نتیجه اینه که فک کنم خیلی سوالاتو از گذشته تا کنون :biggrin: جواب میده

                          serial.fread
                          Read binary data from device
                          Syntax

                          A = fread(obj)
                          A = fread(obj,size,'precision&#039
                          [A,count] = fread(...)
                          [A,count,msg] = fread(...)
                          Description

                          A = fread(obj) and A = fread(obj,size) read binary data from the device connected to the serial port object, obj, and returns the data to A. The maximum number of values to read is specified by size. If size is not specified, the maximum number of values to read is determined by the object's InputBufferSize property. Valid options for size are:

                          n


                          Read at most n values into a column vector.

                          [m,n]


                          Read at most m-by-n values filling an m–by–n matrix in column order


                          این طوری که اینجا میگه باید حل باشه


                          ببین الان lcd ها خیلی خوب باشن 16 میلیون رنگ هستن که این ینی سه تا رنگ 256 حالته (256*256*256) که اونم ینی هر رنگ 8بیت جا میگیره. من تاحالا عکس (رنگی) دابل ندیدم oo:
                          تو اون برنامه ی اولت نوشتی
                          img=double(img);
                          اگه خودش دابله اینو نمیخواد دیگه!

                          یه imread از عکست بگیر. بدش یه عکس از work space بذار میخوام ببینم ابعاد و تایپ داده هاش چیجوریه؟...
                          مثلا من الان یه عکس سیا سفید لود کردم. زده
                          836*823 uint8 . برا یه عکس رنگی مصلا میشه 100*100*3 uint8 (البته اینجا به لطف ادیتور خفن سایت برعکس شده :mrgreen
                          پشت به کنکور ، رو به سربازی...

                          دیدگاه

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