Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Japanese
  4. カメラ映像を送る送りたい
Forum Updated to NodeBB v4.3 + New Features

カメラ映像を送る送りたい

Scheduled Pinned Locked Moved Japanese
1 Posts 1 Posters 2.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    mixcider
    wrote on last edited by
    #1

    こんばんは、現在、Qtでプログラミング中の学生です。
    今、パソコンのWebカメラで撮影した映像をサーバー側プログラムとクライアント側プログラムで
    やり取りするコードを書いているのですが、まったくうまくいきません。
    クライアントに送信はできるのですが、クライアント側で映像を再構築するとなぜか映像が切れ切れ(テレビの調子が悪い時のあの感じです。)になります。
    そこで、UDP送信でカメラ映像をサーバ・クライアント側でやり取りするプログラムのヒントをいただけないでしょうか?

    私の方法を簡単に書いておきます。問題点を指摘していただくだけでも構いません。
    「サーバ側」
    Webカメラで動画撮影→OpenCVの関数でキャプチャー→QByteArrayに変換→QByteArrayのメンバ関数appendで画像の縦、横情報をつける→UDPのwriteDatagramでクライアントに送信
    「クライアント側」
    UDPのreadDatagramで情報取得→QByteArrayのメンバ関数indexOfで画像の縦、横の情報を探して取得(送る前にタグつけてるので、それを探させます)→QByteArrayのdata()関数でデータ型をcharに変更→ネットから拾ってきた関数(1)を使ってcharをQImageのデータ型に→QImageをQPixmapに→QPixmapをラベルに張り付ける

    関数(1)
    QImage* MainWindow::char2QImage(char *cdata)
    {
    int channels = 3;
    QImage *qimg = new QImage(width_data, height_data, QImage::Format_ARGB32);
    char *data = cdata;

    for (int y = 0; y < height_data; y++, data += width_data * channels)
    {
        for (int x = 0; x < width_data; x++)
        {
            char r, g, b, a = 0;
            if (channels == 1)
            {
                r = data[x * channels];
                g = data[x * channels];
                b = data[x * channels];
            }
            else if (channels == 3 || channels == 4)
            {
                b = data[x * channels];
                g = data[x * channels + 1];
                r = data[x * channels + 2];
            }
         if (channels == 4)
            {
                a = data[x * channels + 3];
                qimg->setPixel(x, y, qRgba(r, g, b, a));
            }
            else
            {
                qimg->setPixel(x, y, qRgb(r, g, b));
            }
        }
    }
    return qimg;
    

    }

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved