LoginSignup
1
2

More than 5 years have passed since last update.

Raspberry PI3 でソニーセミコンダクタソリューションズのIU233をOpenCV経由で動かす② IU233をUSB接続で画像出し(Mac上)

Last updated at Posted at 2017-08-09

概要

今年のみんなのラズパイコンテスト2017で,ソニーセミコンダクタソリューションズさんの「IU233」をお借りすることができました.
IU233をラズパイで動かす手順については,「ビジョンプロセッシング・コミュニティ」にて説明がなされているのですが,これを実際にプログラムに組み込んで使用するためにOpenCV上からアクセスすることを目指してトライしてみました.
前回の記事はこちら

前回の反省

前回の記事では、CSIに挿さっているのでついついraspicam_cv を入れてしまいましたが、いろいろ動かしてもやっぱりダメでした。

基本的には「ビジョンプロセッシング・コミュニティ」に書かれているようにVisionProcessingFramework(VPF)を使うのが一般的? のようです。

ただ、これだと電源入れて即使えるようにするのは難しそうだし、他のセンサとも連動させたりしたいので、できれば使いたくない。
そこでIU233 コミュニティをチェックしたところ、IU233+USB基板+Raspbianで画出しにこんな見出しが。。
USBならOpenCVでもPythonでも操作可能なので、まずはmacbookでこの方法の動作を確認。

※ USBカメラでの動作検証なので、以後の作業はMacbook Proにて行なっています。

opencvによる画像出力

まずはフォーラムのページから、同様のOpenCVプログラムを作成して、コンパイル&実行。。

opencv & Python での実行

import cv2

cam = 
camera = cv2.VideoCapture(cam)

while(camera.isOpened() == True):
    ret, frame = camera.read()
    cv2.imshow('image', frame)

    c = cv2.waitKey(1) & 0xFF
    if c == 27:
        break

上のプログラムを作成してチェック。(macbookには内臓のカメラがあるので、カメラ番号は1)
スクリーンショット 2017-08-08 14.38.30.png

絵は出ました。

解像度、FPSの変更

python版

ここには、

cvSetCaptureProperty 関数を使うとサイズを指定できるようです。

とあるので、

camera.set(cv2.CAP_PROP_FPS, 60)
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 400)

print(camera.get(cv2.CAP_PROP_FPS))
print(camera.get(cv2.CAP_PROP_FRAME_WIDTH))
print(camera.get(cv2.CAP_PROP_FRAME_HEIGHT))

こうすると、cv2.CAP_PROP_FRAME_WIDTHとcv2.CAP_PROP_FRAME_HEIGHTの値は(1280、720)とフルサイズで表示され、cv2.CAP_PROP_FPSの値は0.0となり、変更することができません。

python 上でやったから変更できないのかな?
Cでやったらできるか検証。。

C++版

CPPでもやってみました。

#include <iostream>
#include <opencv2/opencv.hpp>

int main(int argc, const char * argv[]) {
    // insert code here...

    cv::VideoCapture cap(1);

    int width = 640, height = 400;
    cap.set(CV_CAP_PROP_FRAME_WIDTH, width);
    cap.set(CV_CAP_PROP_FRAME_WIDTH, height);

    if(!cap.isOpened())
    {
        return -1;
    }

    for(;;)
    {
        cv::Mat frame;
        cap >> frame;
        cv::imshow("frame", frame);
        if(cv::waitKey(30) == 'q')  break;
    }

    std::cout << "Hello, World!\n";
    return 0;
}

ところがこれだとうまくいかない。。。
ここにあるように、cv::Matではなく、IplImageでやるとうまくいくのに。。。

cpp版では画像サイズが変更できない。Pythonでもうまくいかないのは根が同じように思える。
今更IplImageでやるのもイヤだなあ。

やっぱりUSBモードでは無理なのかな。今度はlibSSPでやってみよう

Raspberry PI3 でソニーセミコンダクタソリューションズのIU233をSSP+OpenCV経由で動かす③ IU233をCSIから撮影」に続く.

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2