

spresense main board とcamera boardを利用して arduino ideで画素値を取得しようと考えています。  
getImgBuff()を使用して画素値を得ることは可能でしょうか。  
またspresenseを使い始めたばかりでgetImgBuff()が何を得ることができるのがあまり分かっておらず、`uint16_t *buff =
(uint16_t*)img.getImgBuff();`として得た値が画像の左上の画素値を取得できるという認識なのですが、この認識であっているでしょうか。以下のコードで画像左上の画素値を出力しましたが、`Serial.println(*buff,
BIN);`で出できた値が自分では16ビットで出てくると思っていたのですが実際はそれよりも少ないビット数で出てきてしまいました。何かコードが変であったり、認識が違う箇所がありましたら教えていただきたいです。コードのほとんどはカメラサンプルコードを利用しています。

[code]

    #include <Camera.h>
    #include <stdio.h>  /* for sprintf */
    #include <stdlib.h>
    #include <SDHCI.h>
    
    #define BAUDRATE (115200)
    int take_picture_count = 0;
    void printError(enum CamErr err)
    {
      Serial.print("Error: ");
      switch (err)
        {
          case CAM_ERR_NO_DEVICE:
            Serial.println("No Device");
            break;
          case CAM_ERR_ILLEGAL_DEVERR:
            Serial.println("Illegal device error");
            break;
          case CAM_ERR_ALREADY_INITIALIZED:
            Serial.println("Already initialized");
            break;
          case CAM_ERR_NOT_INITIALIZED:
            Serial.println("Not initialized");
            break;
          case CAM_ERR_NOT_STILL_INITIALIZED:
            Serial.println("Still picture not initialized");
            break;
          case CAM_ERR_CANT_CREATE_THREAD:
            Serial.println("Failed to create thread");
            break;
          case CAM_ERR_INVALID_PARAM:
            Serial.println("Invalid parameter");
            break;
          case CAM_ERR_NO_MEMORY:
            Serial.println("No memory");
            break;
          case CAM_ERR_USR_INUSED:
            Serial.println("Buffer already in use");
            break;
          case CAM_ERR_NOT_PERMITTED:
            Serial.println("Operation not permitted");
            break;
          default:
            break;
        }
    }
    
    void CamCB(CamImage img)
    {
    
      /* Check the img instance is available or not. */
    
      if (img.isAvailable())
        {
    
          /* If you want RGB565 data, convert image data format to RGB565 */
          img.convertPixFormat(CAM_IMAGE_PIX_FMT_RGB565);
    
          /* You can use image data directly by using getImgSize() and getImgBuff().
           * for displaying image to a display, etc. */
          Serial.print("Image data size = ");
          Serial.print(img.getImgSize(), DEC);
          Serial.print(" , ");
          int width = img.getWidth();
          int height = img.getHeight();
          Serial.println("widthsize");
          Serial.println(width);
          Serial.println("heightsize");
          Serial.println(height);
          Serial.println("buff addr = ");
          uint16_t *buff =  (uint16_t*)img.getImgBuff();
          Serial.println(*buff, BIN);
          unsigned short r = *buff >> 11;
          int red = r*8 ;
          unsigned short g = (*buff >> 5) & 0b111111;
          int green = g*4;
          unsigned short b = *buff & 0b11111;
          int blue = b*8;
          Serial.println("r");
          Serial.println(red);
          Serial.println("g");
          Serial.println(green);
          Serial.println("b");
          Serial.println(blue);
          
        }
      else
        {
          Serial.print("Failed to get video stream image\n");
        }
    }
    
    void setup()
    {
      CamErr err;
      Serial.begin(BAUDRATE);
      while (!Serial)
      {
        ;
      }
      Serial.println("Prepare camera");
      theCamera.begin();
      Serial.println("Start streaming");
      err = theCamera.startStreaming(true, CamCB);
      Serial.println("Set Auto white balance parameter");
      err = theCamera.setAutoWhiteBalanceMode(CAM_WHITE_BALANCE_DAYLIGHT);
      Serial.println("Set still picture format");
      err = theCamera.setStillPictureImageFormat(
         CAM_IMGSIZE_QUADVGA_H,
         CAM_IMGSIZE_QUADVGA_V,
         CAM_IMAGE_PIX_FMT_JPG);
    }
    
    void loop()
    {
      
      if (take_picture_count < 3)
        {
        // カメラから静止画を取得
        Serial.println("Taking picture...");
        CamImage img = theCamera.takePicture();
        if (img.isAvailable())
          {  
    
          }
         take_picture_count++;
        
        }
      else
      {
        theCamera.end();
      }
      delay(1000); // 1秒待機して次の画像を取得
    }
    
[/code]


CC BY-SA 4.0
2023-07-06T04:59:31.793
95496
2023-07-07T07:12:48.517
2023-07-07T07:12:48.517
58895
58895
question
spresense arduino
ピクセルの画素値情報を取得する方法