Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 3248|回復: 15
打印 上一主題 下一主題

有關於像素處理的問題

[複製鏈接]
1#
發表於 2018-5-3 15:22:36 | 顯示全部樓層
float B[3][3];
void EtoT(int m, int n) {
  for (int i = 0 ; i < 3 ; i++) {
    int x = m + i;
    if (x > 7) x = 7;
    else if (x < 0) x = 0;
    for (int j = 0 ; j < 3 ; j++) {
      int y = n + j;
      if (y > 7) y = 7;
      else if (y < 0) y = 0;
      B[i][j] = pixels[x * 8 + y];
    }
  }
}
呼叫 EtoT,
使用 m, n 去指定是要那一個 3x3 陣列
結果會放在 B 陣列中
例如 EtoT(0, 0) 或 EtoT(7, 7) 或 EtoT(0,7)
或是 EtoT(-1, -1)

2#
發表於 2018-5-7 10:31:00 | 顯示全部樓層
你的三個問題在那?
其實你只要直接把程式COPY到你的程式中
呼叫後
然後把值印出來就可以了
3#
發表於 2018-5-7 11:05:21 | 顯示全部樓層
本帖最後由 超新手 於 2018-5-7 11:06 編輯

1. 不是, 是左上角
2. 對. 我的程式己經做類似處理
    你自己印出來看看就知道了
    有問題自己小改一下即可
3.  矩陣運算? 這題目可大可小
float A[3][3], B[3][3], C[3][3];
//加法 C = A+B
for(int i = 0 ; i < 3 ; i++) {
for(int j = 0 ; j < 3 ; j++) {
C[j] = A[j]+B[j];
}
}
//減法 C = A-B
for(int i = 0 ; i < 3 ; i++) {
for(int j = 0 ; j < 3 ; j++) {
C[j] = A[j]-B[j];
}
}
//乘法 C = A*B
for(int i = 0 ; i < 3 ; i++) {
for(int j = 0 ; j < 3 ; j++) {
  C[j] = 0;
  for(int k=0; k<3; k++) {
    C[j] += A[k]*B[k][j];
  }
}
}
要用 C 處理矩陣運算? ..........
4#
發表於 2018-5-7 11:18:06 | 顯示全部樓層
矩陣的九個值你都知道
B[0][0], B[0][1], B[0][2],  
B[1][0], B[1][1], B[1][2],
B[2][0], B[2][1], B[2][2],
那隨便抓任何一個值出來算, 不就好了
例如
float X = B[0][0]*B[0][1] + 3*B[2][2] - B[0][2];
5#
發表於 2018-5-7 11:25:12 | 顯示全部樓層
>>可以不要是左上角嗎 而是矩陣的中心
改這個應該不會很難吧?
如果你不會改
只要呼叫前, 把 m, n 減一即可
6#
發表於 2018-5-7 16:05:38 | 顯示全部樓層
本帖最後由 超新手 於 2018-5-7 16:09 編輯

看來你對陣列處理有點困難
原因出在它的輸出是一維陣列, 並不是二維陣列
所以我把程式改一下, 讓它變成二維陣列
照理說, 值輸出應該是相同的, 有問題再告知
  1. #include <Wire.h>
  2. #include <Adafruit_AMG88xx.h>
  3. Adafruit_AMG88xx amg;
  4. float pixels[8][8];
  5. void setup() {
  6.   Serial.begin(9600);
  7.   Serial.println(F("AMG88xx pixels"));
  8.   bool status;
  9.   // default settings
  10.   status = amg.begin();
  11.   if (!status) {
  12.     Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
  13.     while (1);
  14.   }
  15.   Serial.println("-- Pixels Test --");
  16.   Serial.println();
  17.   delay(100); // let sensor boot up
  18. }
  19. void loop() {
  20.   //read all the pixels
  21.   amg.readPixels(&pixels[0][0]);
  22.   Serial.print("[");
  23.   for (int i = 0; i < 8; i++) {
  24.     for (int j = 0; j < 8; j++) {
  25.       Serial.print(pixels[i][j]);
  26.       Serial.print(", ");
  27.     }
  28.     Serial.println();
  29.   }
  30.   Serial.println("]");
  31.   Serial.println();
  32. // 和中心點pixels[5][5]的差值  
  33.   Serial.print(pixels[4][4] - pixels[5][5]);Serial.print(" ");
  34.   Serial.print(pixels[4][5] - pixels[5][5]);Serial.print(" ");
  35.   Serial.println(pixels[4][6] - pixels[5][5]);
  36.   Serial.print(pixels[5][4] - pixels[5][5]);Serial.print(" ");
  37.   Serial.print(pixels[5][5] - pixels[5][5]);Serial.print(" ");
  38.   Serial.println(pixels[5][6] - pixels[5][5]);
  39.   Serial.print(pixels[6][4] - pixels[5][5]);Serial.print(" ");
  40.   Serial.print(pixels[6][5] - pixels[5][5]);Serial.print(" ");
  41.   Serial.println(pixels[6][6] - pixels[5][5]);  

  42.   //delay a second
  43.   delay(1000);
  44. }
複製代碼


經過修改後, 如果你要處理 pixels[5][5] 的值
3x3 的陣列就是
pixels[4][4], pixels[4][5], pixels[4][6],
pixels[5][4], pixels[5][5], pixels[5][6],
pixels[6][4], pixels[6][5], pixels[6][6],
看你要怎樣運算都可以, 也比較直覺




7#
發表於 2018-5-7 16:59:55 | 顯示全部樓層
本帖最後由 超新手 於 2018-5-7 17:01 編輯

只要寫成副程式, 加上使
用迴圈就可以了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-12 04:04 , Processed in 0.358753 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表