C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

カメラ設定 縦横

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■102753 / inTopicNo.1)  カメラ設定 縦横
  
□投稿者/ カメラ (1回)-(2023/12/22(Fri) 18:18:58)

分類:[C#] 

C#にてカメラから出力を得るためVideoCaptureにて初期設定を行っています

capture.Set(VideoCaptureProperties.FrameHeight, 3264);
capture.Set(VideoCaptureProperties.FrameWidth, 2448);


としても実際は
1920×1440となります

設定した値に最も近いカメラ設定が反映されるらしいのですが、
なぜ異なる値が設定されるのでしょうか?


引用返信 編集キー/
■102754 / inTopicNo.2)  Re[1]: カメラ設定 縦横
□投稿者/ WebSurfer (2854回)-(2023/12/22(Fri) 19:22:05)
No102753 (カメラ さん) に返信

どういうアプリを作っているかと開発環境を書きましょう。
引用返信 編集キー/
■102755 / inTopicNo.3)  Re[2]: カメラ設定 縦横
□投稿者/ くま (17回)-(2023/12/23(Sat) 00:48:52)
開発環境とどの様なカメラを使用しているかわからないので憶測を含みますが、

> 設定した値に最も近いカメラ設定が反映されるらしいのですが、
> なぜ異なる値が設定されるのでしょうか?

これは普通の動作だと思いますよ。
カメラには画素数という性能があって基本[横のピクセル数]x[縦のピクセル数]で計算されます。
よってそれ以上のサイズを求められてもカメラ側で処理する事はなく、最大画素数で出力されます。
これはカメラが持っている物理的性能なので仕方がありません。

一応カメラ側では「縮小」機能はあるでしょうがそれも画素数に対して一定の比率になっているはずです。
これは1/2とか1/4の縮小であれば特に計算を必要としないで変換できるからです。

もしそれ以外のサイズがほしい場合、取得した画像データを取り込んだ側で「拡大・縮小」して調整を行います。

・補間方法を指定して画像を拡大、縮小(スケーリング)表示する
https://dobon.net/vb/dotnet/graphics/interpolationmode.html

・OpenCvSharpをつかう その11(画像のサイズ変更)
https://schima.hatenablog.com/entry/20091031/1256975329

上記例を見てもらえれば分かりますが特に「拡大」に関しては、補間方法がポイントになってきます。
この変換方法によっても画質が変わりますし変換まで時間が発生します。
それ以外に比率違い等加工が必要な場合が考えられます。
普通そこまでするなら、カメラで画像データを最大画素数で保存してPC側で加工するのが一般的かと。

カメラをビデオカメラのような使い方をすれば当然フレームレートにも影響されますし
連射モードの際の速度にも影響されます。
それに機能が増えればコストも当然かかりますからカメラ側にはそのような機能がふくまれないのが一般的かと

というわけで、「カメラ側では最大性能(画素数)に設定される」という事になります。

引用返信 編集キー/
■102756 / inTopicNo.4)  Re[3]: カメラ設定 縦横
□投稿者/ カメラ (2回)-(2023/12/23(Sat) 04:00:17)
環境はVidual stdio 2022で
カメラはノートPCのリアとフロントです。

単純に今はカメラ画像を〜〜〜.jpgに保存するような単純なものを組もうとしています。

疑問点の書き方を変えてみます。

PCに最初から入っているカメラアプリから
フロントカメラを選択すると3264×2448等が選択できます
リアも2000台×〜〜〜を選択できます。
しかしcapture.Set(VideoCaptureProperties.〜〜〜)
を使うとカメラ設定の選択候補にすらない1920×1440が上限かのように設定される理由が分からない状態です。
(縦横の初期値を設定しなければ720*680?になりました。)

引用返信 編集キー/
■102757 / inTopicNo.5)  Re[4]: カメラ設定 縦横
□投稿者/ くま (18回)-(2023/12/23(Sat) 05:31:34)
No102756 (カメラ さん) に返信
> 環境はVidual stdio 2022で
> カメラはノートPCのリアとフロントです。
OSは?
C#は.net frameworkで開発ですか?それともWPF?
あとカメラからの画像取得に「OpenCvSharp」を使っていますか?(これ重要)
それとも別の方法ですか?


> PCに最初から入っているカメラアプリから
> フロントカメラを選択すると3264×2448等が選択できます
> リアも2000台×〜〜〜を選択できます。

そのノートPCのスペック表でフロント・リアのカメラ性能(画素数)は確認されましたか?
PCに最初から入っているカメラアプリが拡大処理して[1920×1440]を[3264×2448]にしているという事はありませんか?
そうでない場合ですが

「OpenCvSharp」を使っているとすれば、として「OpenCvSharp4」を使用していますか?
「OpenCvSharp4」はすべてのカメラドライバーに対応しているわけではありません。
https://github.com/shimat/opencvsharp/issues/245
https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=34731&no=0&jump=1&KLOG=4

ノートPCの製品情報からカメラのドライバーを調べて、そのドライバー経由でアクセスする方法が確実かと思います。
多分になりますが
https://learn.microsoft.com/ja-jp/windows/uwp/audio-video-camera/capture-photos-and-video-with-cameracaptureui
https://learn.microsoft.com/ja-jp/uwp/api/windows.media.capture.cameracaptureui?view=winrt-22621
https://learn.microsoft.com/ja-jp/windows/uwp/audio-video-camera/camera-profiles

https://tocsworld.wordpress.com/2014/02/25/c%E3%81%AB%E3%82%88%E3%82%8Busb%E3%82%AB%E3%83%A1%E3%83%A9%E6%93%8D%E4%BD%9C/
この辺りが参考になるかと...

あとフロントカメラとリアカメラがあるとすれば最低2つ以上デバイスIDがあると思いますが
目的のカメラのデバイスIDは指定できていますか?

あと
> capture.Set(VideoCaptureProperties.FrameHeight, 3264);
> capture.Set(VideoCaptureProperties.FrameWidth, 2448);
(縦長)ではなく
capture.Set(VideoCaptureProperties.FrameWidth, 3264);
capture.Set(VideoCaptureProperties.FrameHeight, 2448);
(横長)では?
引用返信 編集キー/
■102788 / inTopicNo.6)  Re[5]: カメラ設定 縦横
□投稿者/ カメラ (3回)-(2023/12/26(Tue) 11:29:49)
すみません
あれから色々やってもダメでした。

OSはwin10、11
.net framework
OpenCvSharp4です

capture.Set(VideoCaptureProperties.FourCC, VideoWriter.FourCC('Y', 'U', 'Y', '2'));
にてフォーマットを変えれば〜
という記事を見たのですが、良いのが見つからないです(もしくはそもそもないのか)。

カメラについてはSurface go リアカメラで
性能を確認すると8MPあったので
やはり解像度はもっと上にいけるはずだと思っています。
引用返信 編集キー/
■102789 / inTopicNo.7)  Re[6]: カメラ設定 縦横
□投稿者/ くま (20回)-(2023/12/26(Tue) 13:07:30)
2023/12/26(Tue) 14:29:02 編集(投稿者)
No102788 (カメラ さん) に返信
以下のソースコードを試してみて下さい。

    int frameWidth = 3264;
    int frameHeight = 2448;
    int cameraDeviceId = 0;
    var videoCapture = VideoCapture.FromCamera(cameraDeviceId);
    if (!videoCapture.Set(VideoCaptureProperties.FrameWidth, frameWidth))
    {
        logger.LogWarning($"フレーム幅を設定できませんでした。 {frameWidth}");
    }
    if (!videoCapture.Set(VideoCaptureProperties.FrameHeight, frameHeight))
    {
        logger.LogWarning($"フレーム高さを設定できませんでした。 {frameHeight}");
    }
    using (videoCapture)
    {
        videoCapture.Grab();
        var image = videoCapture.RetrieveMat();
        logger.LogInformation($"イメージサイズ [{image.Width} x {image.Height}]");
    }

追記
情報がないので不明なんですが、
videoCapture.get(videoCapture.GIGA_FrameWidthMax)
videoCapture.get(videoCapture.GIGA_FrameHeightMax)
videoCapture.get(videoCapture.GIGA_FrameSensWidth)
videoCapture.get(videoCapture.GIGA_FrameSensHeight)
で値を確認してみて下さい

引用返信 編集キー/
■102790 / inTopicNo.8)  Re[7]: カメラ設定 縦横
□投稿者/ カメラ (4回)-(2023/12/26(Tue) 15:47:25)
FourCCは
-466162819

videoCapture.get(videoCapture.GIGA_FrameWidthMax)
videoCapture.get(videoCapture.GIGA_FrameHeightMax)
videoCapture.get(videoCapture.GIGA_FrameSensWidth)
videoCapture.get(videoCapture.GIGA_FrameSensHeight)
はすべて-1でした

ノートPCカメラからの返事が-1とは
初期化が間違ってるのですかね

色々試してみます
引用返信 編集キー/
■102791 / inTopicNo.9)  Re[8]: カメラ設定 縦横
□投稿者/ くま (21回)-(2023/12/26(Tue) 23:55:53)
No102790 (カメラ さん) に返信
まずは状況確認
・先に提示したコードを実行した結果ログにはなんと表示されていますか?

次に私が調査した範囲での情報です。
どうもOpenCvSharp4では
・対象カメラをOpenしてからサイズ設定する場合
・対象カメラをOpenする前にサイズ設定する場合
2種類のパターンがあるようです。
どちらが良いかは不明。試してみるしかありません。

また現象として「カメラのデフォルトサイズから変更できない」というのもあるそうです。
この辺りは解決されている様子がなく、前にも書きましたが
「OpenCvSharp4がすべてのカメラに対応しているわけではない」という事になります。

あとは「カメラ用ドライバが複数あり別のドライバでは動く可能性がある」という事
PowerShellを立ち上げて
Get-WmiObject -query "Select * from Win32_PnPSignedDriver where DeviceClass = 'Camera'"
と入力してみて下さい。
カメラとして使用できるドライバ一覧が表示されるはずです。

ここからは提案になりますが
カメラの画像取得に関してはOpenCvSharp4を使わずに別の方法で画像を取得。
もし画像の特殊な加工が必要ならその部分のみOpenCvSharp4を使われる方向で進められては?

AForge.NET利用(DirectShowを使用)
https://tocsworld.wordpress.com/2014/02/25/c%E3%81%AB%E3%82%88%E3%82%8Busb%E3%82%AB%E3%83%A1%E3%83%A9%E6%93%8D%E4%BD%9C/
https://office-yone.com/record_movie_web_camera_with_aforge/
http://robot-factory.blogspot.com/2013/10/c-web.html
http://note.websmil.com/vb/aforge/vb-net-aforge-usb%E3%82%AB%E3%83%A1%E3%83%A9%E7%94%BB%E5%83%8F%E8%A1%A8%E7%A4%BA

実際の現物がないのでこれ以上の調査ができないです...
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ