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

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

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

Re[12]: USBカメラから画像を読み込みについて


(過去ログ 124 を表示中)

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

■74104 / inTopicNo.1)  USBカメラから画像を読み込みについて
  
□投稿者/ いち (1回)-(2014/12/01(Mon) 09:49:25)

分類:[C/C++] 

http://hmatsudaiac.wix.com/venus-robotix#!set-opencv-on-cpp-windows/c1gr5を参考にして、USBカメラの画像を読み込んで、ウインドウを表示したいのですが、以下のエラーが出ます。

いろんなサイトをみましたが、解決できませんでした。(ウインドウに文字を表示する事はできました。)手詰まり状態です。
ご教授お願いいたします。

環境:VS2013 Debug OPENCV2.4.9

エラーメッセージ:
初回例外が 0x76E52F71 で発生しました (OpenCV_Test.exe 内): Microsoft C++ の例外: cv::Exception (メモリの場所 0x0038F99C)。

この例外のハンドラーがある場合は、プログラムを安全に続行できます。

ソース:
#include <iostream>
#include <stdio.h>
#include <opencv2/opencv.hpp>
//静的リンクライブラリの指定
#include <opencv2/opencv_lib.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
//名前空間の指定
using namespace cv;

#define WIDTH 640
#define HEIGHT 480

int main(void)
{
int key;
char windowNameCapture[] = "1 Capture";
cv::Mat frameImage;

cv::VideoCapture cap(0); // 引数はcvCreateCameraCapture()と同じ
if (!cap.isOpened())
{
return -1;
}
cv::namedWindow(windowNameCapture, CV_WINDOW_AUTOSIZE);


while (1){

cap >> frameImage;
cv::imshow(windowNameCapture, frameImage);
key = cv::waitKey(0);
if (key == 'q'){
break;
}
}

return 0;
}
引用返信 編集キー/
■74106 / inTopicNo.2)  Re[1]: USBカメラから画像を読み込みについて
□投稿者/ とっちゃん (281回)-(2014/12/01(Mon) 10:26:58)
とっちゃん さんの Web サイト
No74104 (いち さん) に返信
> http://hmatsudaiac.wix.com/venus-robotix#!set-opencv-on-cpp-windows/c1gr5を参考にして、USBカメラの画像を読み込んで、ウインドウを表示したいのですが、以下のエラーが出ます。
>
> いろんなサイトをみましたが、解決できませんでした。(ウインドウに文字を表示する事はできました。)手詰まり状態です。
> ご教授お願いいたします。
>
> 環境:VS2013 Debug OPENCV2.4.9
>
> エラーメッセージ:
> 初回例外が 0x76E52F71 で発生しました (OpenCV_Test.exe 内): Microsoft C++ の例外: cv::Exception (メモリの場所 0x0038F99C)。
>
> この例外のハンドラーがある場合は、プログラムを安全に続行できます。
>
このエラーメッセージが原因でプログラムが終了してしまうのでしょうか?
これは、cv::Exception 例外(これの意味するところが分からない場合はそれも書いておくとよいです)が発生したが
この例外をハンドリングしていない(受け取っていない)ため、プログラムを続行できるかわからないので終了という形になっています。

どこで例外が発生しているかについては、プログラムを見ただけではわかりません(OpenCVを呼び出しているすべての箇所で発生の可能性があります)。

どこでエラーが発生しているかは、エラーが発生する環境で「デバッグ」を行い、例外発生個所を突き止めてください。
また、必要があればプログラムを修正あるいは、環境整備を行ってください。


引用返信 編集キー/
■74108 / inTopicNo.3)  Re[2]: USBカメラから画像を読み込みについて
□投稿者/ いち (3回)-(2014/12/01(Mon) 11:08:01)
No74106 (とっちゃん さん) に返信
とっちゃん様、ご返信ありがとうございます。

> このエラーメッセージが原因でプログラムが終了してしまうのでしょうか?
プログラムの実行途中で、このエラーメッセージが表示されます。
デバッグの停止をしないと、プログラムは終了しないです。


> これは、cv::Exception 例外(これの意味するところが分からない場合はそれも書いておくとよいです)が発生したが
> この例外をハンドリングしていない(受け取っていない)ため、プログラムを続行できるかわからないので終了という形になっています。
cv::Exception 例外について調べたのですが、「std::exceptionから派生しているcv::Exceptionで例外は定義されています。」とあり、よく分からないです。
例外処理をするといいのでしょうか?
try {

} catch( cv::Exception & e) {
const char * err_msg = e.what();
std::cout << err_msg << std::endl;
}


> どこで例外が発生しているかについては、プログラムを見ただけではわかりません(OpenCVを呼び出しているすべての箇所で発生の可能性があります)。
>
> どこでエラーが発生しているかは、エラーが発生する環境で「デバッグ」を行い、例外発生個所を突き止めてください。

ブレイクポイントを置いて、1行毎にデバッグしていくと以下のwhile文から抜けなかったです。
while (1){

cap >> frameImage;
cv::imshow(windowNameCapture, frameImage);
key = cv::waitKey(0);
if (key == 'q'){
break;
}
}

VS2013を初めてさわるので、デバッグの仕方があっているかどうか分からないです。(デバッグの仕方を参考にしたサイト:http://www.nitoyon.com/vc/tutorial/debug/debugger.htm
自動変数ウインドに値が変わっていくのですが、それがエラーなのかどうか、capに値がありませんと出るのがエラーかどうかも判断がつかないです。

> また、必要があればプログラムを修正あるいは、環境整備を行ってください。
初めてVS2013を触るので、初心者向けの本(VisualC++2013)や、サイト(http://physics-station.blogspot.jp/2013/03/opencv-visual-studio.html)をみて整備しています。
引用返信 編集キー/
■74109 / inTopicNo.4)  Re[3]: USBカメラから画像を読み込みについて
□投稿者/ とっちゃん (282回)-(2014/12/01(Mon) 13:25:50)
とっちゃん さんの Web サイト
No74108 (いち さん) に返信
> ■No74106 (とっちゃん さん) に返信
> とっちゃん様、ご返信ありがとうございます。
>
>>このエラーメッセージが原因でプログラムが終了してしまうのでしょうか?
> プログラムの実行途中で、このエラーメッセージが表示されます。
> デバッグの停止をしないと、プログラムは終了しないです。
>
デバッグ実行ではない場合(エクスプローラから実行した場合や、Ctrl+F5で実行した場合)はどうなりますか?
何事もなかったのように動作しているでしょうか?

もしそうだとしたら、VSのメニュー「デバッグ-例外」から、
C++ Exceptions のチェックがついているかを確認してみてください。

チェックがついている項目はデバッグ中に例外が発生すると無条件に停止するブロックとなります。
それ以外は、例外ハンドラが用意されていない場合のみ停止します。

VSのデフォルト設定では、デバッグ中に例外が発生した場合でも無条件に停止するのは、
Platformの例外クラス(C++/CX用)くらいになっているはずです。

>
>>これは、cv::Exception 例外(これの意味するところが分からない場合はそれも書いておくとよいです)が発生したが
>>この例外をハンドリングしていない(受け取っていない)ため、プログラムを続行できるかわからないので終了という形になっています。
> cv::Exception 例外について調べたのですが、「std::exceptionから派生しているcv::Exceptionで例外は定義されています。」とあり、よく分からないです。

よくわからないは、例外とはなにか?がよくわからないという意味でしょうか?
とすると、ちょっと掲示板のやり取りという部分ではボリュームが大きくなってしまうので
なにかC++の入門系の書籍等々を読んでみるのがよいかと。


> 例外処理をするといいのでしょうか?
> try {
>
> } catch( cv::Exception & e) {
> const char * err_msg = e.what();
> std::cout << err_msg << std::endl;
> }
>
プログラムが実行できないのなら、例外処理をする必要がありますがそうではないのなら無視してもいい項目だと思います。

> ブレイクポイントを置いて、1行毎にデバッグしていくと以下のwhile文から抜けなかったです。
> while (1){
>
> cap >> frameImage;
> cv::imshow(windowNameCapture, frameImage);
> key = cv::waitKey(0);
> if (key == 'q'){
> break;
> }
> }
>
これが、なぜ終了しないかわかりますよね?


> VS2013を初めてさわるので、デバッグの仕方があっているかどうか分からないです。(デバッグの仕方を参考にしたサイト:http://www.nitoyon.com/vc/tutorial/debug/debugger.htm
> 自動変数ウインドに値が変わっていくのですが、それがエラーなのかどうか、capに値がありませんと出るのがエラーかどうかも判断がつかないです。
>
>>また、必要があればプログラムを修正あるいは、環境整備を行ってください。
> 初めてVS2013を触るので、初心者向けの本(VisualC++2013)や、サイト(http://physics-station.blogspot.jp/2013/03/opencv-visual-studio.html)をみて整備しています。

プログラム開発も初めてですかね?
もしそうなら、まずは、Helloworldからとは言いませんが、VSの使い方なども含めて解説されている書籍等々を探してみることをお勧めします。
そうではなく、ほかの環境での開発経験があるのであれば、F1キーをおして、VSの使い方をリファレンスレベルで学習してしまうほうが早いと思います。

引用返信 編集キー/
■74113 / inTopicNo.5)  Re[4]: USBカメラから画像を読み込みについて
□投稿者/ いち (4回)-(2014/12/01(Mon) 15:12:39)
No74109 (とっちゃん さん) に返信
とっちゃん様、ご返信ありがとうございます。
> デバッグ実行ではない場合(エクスプローラから実行した場合や、Ctrl+F5で実行した場合)はどうなりますか?
> 何事もなかったのように動作しているでしょうか?
Ctrl+F5で実行した場合、デバッグエラーで停止します。

> もしそうだとしたら、VSのメニュー「デバッグ-例外」から、
> C++ Exceptions のチェックがついているかを確認してみてください。
チェックはついております。

> チェックがついている項目はデバッグ中に例外が発生すると無条件に停止するブロックとなります。
> それ以外は、例外ハンドラが用意されていない場合のみ停止します。
>
> VSのデフォルト設定では、デバッグ中に例外が発生した場合でも無条件に停止するのは、
> Platformの例外クラス(C++/CX用)くらいになっているはずです。
>
>>
> >>これは、cv::Exception 例外(これの意味するところが分からない場合はそれも書いておくとよいです)が発生したが
> >>この例外をハンドリングしていない(受け取っていない)ため、プログラムを続行できるかわからないので終了という形になっています。
>>cv::Exception 例外について調べたのですが、「std::exceptionから派生しているcv::Exceptionで例外は定義されています。」とあり、よく分からないです。
>
> よくわからないは、例外とはなにか?がよくわからないという意味でしょうか?
> とすると、ちょっと掲示板のやり取りという部分ではボリュームが大きくなってしまうので
> なにかC++の入門系の書籍等々を読んでみるのがよいかと。
例外処理とは、異常が途中で発生した時に中断させる処理だと思っています。
分からない点は、「cv::Exception」これの意味するところが分からないです。

>>例外処理をするといいのでしょうか?
>>try {
>>
>>} catch( cv::Exception & e) {
>> const char * err_msg = e.what();
>> std::cout << err_msg << std::endl;
>>}
>>
> プログラムが実行できないのなら、例外処理をする必要がありますがそうではないのなら無視してもいい項目だと思います。
了解です。

>>ブレイクポイントを置いて、1行毎にデバッグしていくと以下のwhile文から抜けなかったです。
>> while (1){
>>
>> cap >> frameImage;
>> cv::imshow(windowNameCapture, frameImage);
>> key = cv::waitKey(0);
>> if (key == 'q'){
>> break;
>> }
>> }
>>
> これが、なぜ終了しないかわかりますよね?
whileの条件が(1)で、whileは条件式が正しい(真の時)にはループするので無限ループしていると思ってます。
分からない点は、ブレイクポイントを置いて、F10で実行させていくときに、エラーが出ないで、ループする事です。

> プログラム開発も初めてですかね?
VC++は初めてです。

> もしそうなら、まずは、Helloworldからとは言いませんが、VSの使い方なども含めて解説されている書籍等々を探してみることをお勧めします。
> そうではなく、ほかの環境での開発経験があるのであれば、F1キーをおして、VSの使い方をリファレンスレベルで学習してしまうほうが早いと思います。
F1を押すと、ヘルプビューアーが出てきますが、MSDNと合わせて読んでいけばいいのでしょうか?
アドバイス本当にありがとうございます。
引用返信 編集キー/
■74114 / inTopicNo.6)  Re[5]: USBカメラから画像を読み込みについて
□投稿者/ とっちゃん (283回)-(2014/12/01(Mon) 17:59:36)
とっちゃん さんの Web サイト
No74113 (いち さん) に返信
>>デバッグ実行ではない場合(エクスプローラから実行した場合や、Ctrl+F5で実行した場合)はどうなりますか?
>>何事もなかったのように動作しているでしょうか?
> Ctrl+F5で実行した場合、デバッグエラーで停止します。
>
えっと。。。
Ctrl+F5(デバッグなしで開始)ではデバッグエラー(ってなんだ?というのはありますが)が出て停止(停止するの意味もいろいろあるけど)して
デバッグ実行では、例外発生時に停止するが継続すれば実行できている。

という状況ですか?
読解力がなくて申し訳ないです。いまいち状況がつかめない。。。


> 例外処理とは、異常が途中で発生した時に中断させる処理だと思っています。
中断というか、戻り値+別のタイミングでのエラー詳細取得という方法とは異なり
任意のオブジェクト(C++の場合、例外発生の詳細情報を渡すためのオブジェクトはどんなものでもよい)を
エラー通知のための手段として利用して、関数の途中からでも、エラーを呼び出し元に強制的に送り返せる仕組みです。

かなり乱暴な書き方してますので、きちんと知りたいならC++のリファレンスを見てください。
例外機構の考え方そのものは、C++もC#もJavaも大して変わりませんから、まぁエラーを返す仕組みとざっくり覚えておいても
とりあえずはいいのかもしれませんが。


> 分からない点は、「cv::Exception」これの意味するところが分からないです。
>
「std::exceptionから派生しているcv::Exceptionで例外は定義されています。」
という部分ですね。

これをもう少し詳しく書くと
cv::Exception(cv 名前空間にある Exception クラス)は、std::exception(std名前空間にある exceptionクラス)の派生クラスです。
OpenCV ではその派生クラスである、cv::Exception クラスを使って例外を定義しています。
という意味になります。

派生クラスについては分かりますよね?
定義は、文字通り定義で、
>namespace cv
>{
> class Exception : public std::exception
> {...};
>}
というクラスの定義を行っているということです。



もっと、わかりやすく書くと、OpenCVでは、例外を発生させるときは cv 名前空間にある Exception という例外クラス(例外通知用クラスを例外クラスといいます)を
使っていますよ。

ということです。

cv::Exception クラスの細かな内容については OpenCV のリファレンスなりか、クラス定義を見てもらうのが一番かな?


> >>ブレイクポイントを置いて、1行毎にデバッグしていくと以下のwhile文から抜けなかったです。
> >> while (1){
> >>
> >> cap >> frameImage;
> >> cv::imshow(windowNameCapture, frameImage);
> >> key = cv::waitKey(0);
> >> if (key == 'q'){
> >> break;
> >> }
> >> }
> >>
>>これが、なぜ終了しないかわかりますよね?

> whileの条件が(1)で、whileは条件式が正しい(真の時)にはループするので無限ループしていると思ってます。
> 分からない点は、ブレイクポイントを置いて、F10で実行させていくときに、エラーが出ないで、ループする事です。
>
while( 1 ){ ... }
は、確かに ... の部分を無限ループですね。
この部分は問題なさそうです(学校的答えでは、key=='q'の部分に言及してないので三角ですけどw)。

で、F10でステップ実行していれば問題はないということは、そうではない場合はこのループのどこかで例外が発生する
ということですか?
例外の詳細は、cv::Exception の内容(デバッガで見れるはずです)を参照すると何かわかるかもしれません。
まずは、その部分とどの処理を行ったときに発生するか(何回目のループなのかまでチェックしておくとよいかもしれませんね)
も記載しておくと、回答側としては答えやすい(経験者のカンにも頼れれば、そこにある情報から原因を特定することができる可能性が高まる)と思います。


>>プログラム開発も初めてですかね?
> VC++は初めてです。
>
ということは開発経験そのものはあるということですね?

ちなみに、C++ははじめてですか?

> F1を押すと、ヘルプビューアーが出てきますが、MSDNと合わせて読んでいけばいいのでしょうか?
F1を押して中身が空っぽのヘルプビューアーが出るのなら、VSのメニュー「ヘルプ-ヘルプ設定の設定-ブラウザで起動」にして
呼び出すと、WebブラウザでMSDNライブラリを開いてくれます。

ヘルプビューアーを使いたい場合は、コンテンツの管理で自分がローカルでも参照したいドキュメント類をローカルに追加してやれば
MSDNライブラリをヘルプビューアーで参照できるようになります。

ちなみに、現行系の Visual Studio のリファレンスは、MSDNライブラリに内包されています。





さて、一般論はこれくらいとして

改めて。。。

http://hmatsudaiac.wix.com/venus-robotix#!set-opencv-on-cpp-windows/c1gr5

これを参考にしたとありますが、いくつか違っている個所があります。

そのあたりをもう一度よく見てみてはいかがでしょう?
また、OpenCVのリファレンスなども参考に調べてみるといいかもしれません。

ステップ実行では問題なくて、ブレークせずに一気に動かすと例外が出るみたいなので
処理の実行時間の問題とかはないですかね?

ステップ実行は人間に見せるためにプログラム的にスリープ状態に何度も陥るため
関数の呼び出し時間がざっくりと数百倍〜数万倍くらい長くかかるようになります。


おまけ。
自分でも何度となく経験していますが、時間タイミングがあるような処理で
ステップ実行したりリモートデバッグしたりすると
それが原因でタイムアウトしてしまったり(ステップしたりブレークして変数見てる間に時間が過ぎてしまうw)
リリース版だと、処理が速すぎてエラーになったりなんてことはよくあります。。。

遭遇時と、問題が特定できたときは結構へこみます。。

引用返信 編集キー/
■74151 / inTopicNo.7)  Re[6]: USBカメラから画像を読み込みについて
□投稿者/ いち (5回)-(2014/12/03(Wed) 11:09:02)
No74114 (とっちゃん さん) に返信
とっちゃん さん様、返信ありがとうございます。

> >>デバッグ実行ではない場合(エクスプローラから実行した場合や、Ctrl+F5で実行した場合)はどうなりますか?
> >>何事もなかったのように動作しているでしょうか?
>>Ctrl+F5で実行した場合、デバッグエラーで停止します。
> えっと。。。
> Ctrl+F5(デバッグなしで開始)ではデバッグエラー(ってなんだ?というのはありますが)が出て停止(停止するの意味もいろいろあるけど)して
> デバッグ実行では、例外発生時に停止するが継続すれば実行できている。
> という状況ですか?
> 読解力がなくて申し訳ないです。いまいち状況がつかめない。。。

以下のメッセージが出て停止します(エラーメッセージには、中止・再試行・無視の3つのボタンがあります)

Microsoft Visual C++ Runtime Library
Debug error!
Program: ...visual studio
2013\Projects\Debug|OpenCV_Test.exe

R6010
-about() has been called
(Press Retry to debug the application)

> while( 1 ){ ... }
> は、確かに ... の部分を無限ループですね。
> この部分は問題なさそうです(学校的答えでは、key=='q'の部分に言及してないので三角ですけどw)。
コンソール画面で「q」を押すと、強制終了すると思ってます。

> で、F10でステップ実行していれば問題はないということは、そうではない場合はこのループのどこかで例外が発生する
> ということですか?
while( 1 ){ ... }内をコメントをして、そこから1行だけコメントしないで順番に、実行した所、以下の部分でハンドルエラーで出ました。
cv::imshow(windowNameCapture, frameImage);

> 例外の詳細は、cv::Exception の内容(デバッガで見れるはずです)を参照すると何かわかるかもしれません。
恥ずかしながら、デバッカの内容を読みこなせないのです。
参考にしたサイト:http://msdn.microsoft.com/ja-jp/library/d0b8xh0y.aspx
参考にした資料:「Visual Studioデバッグ入門」 by 森理 麟(@moririring)さん Lv.1くまー(わんくま同盟 名古屋勉強会 #31)

> まずは、その部分とどの処理を行ったときに発生するか(何回目のループなのかまでチェックしておくとよいかもしれませんね)
1回目のループで出ます。

> も記載しておくと、回答側としては答えやすい(経験者のカンにも頼れれば、そこにある情報から原因を特定することができる可能性が高まる)と思います。
自分には経験者のカンがないです、、、(周りにも経験者がおりません、、、)

> ということは開発経験そのものはあるということですね?
> ちなみに、C++ははじめてですか?
初めてです。


> さて、一般論はこれくらいとして
>
> 改めて。。。
>
> http://hmatsudaiac.wix.com/venus-robotix#!set-opencv-on-cpp-windows/c1gr5
>
> これを参考にしたとありますが、いくつか違っている個所があります。
一日、リファレンス等を読んで、どこが間違っているま見てましたが、どこが間違っているのかが分かりませんでした。

> ステップ実行では問題なくて、ブレークせずに一気に動かすと例外が出るみたいなので
> 処理の実行時間の問題とかはないですかね?
一気に動かすという事は、処理が速いからエラーの可能性があるという事ですか?



引用返信 編集キー/
■74156 / inTopicNo.8)  Re[7]: USBカメラから画像を読み込みについて
□投稿者/ 774RR (189回)-(2014/12/03(Wed) 12:33:05)
> R6010
> -about() has been called
正確にコピペしてる?これ about ではなくて abort のはずなんだけど。

abort() 中断関数が呼ばれたのでプログラムは中断しました、ってメッセージ。
これは「例外」を処理しなかったのでプログラムを終了させたってこと。

一般論として「例外」ってのは何かの誤り・失敗だ。
・開こうとしたファイルが無いとか
・イメージを読もうとしたが失敗したとか
・プログラムがバグっていて正しくない処理をしたとか

例外をハンドルしない=そこで処理を諦めて試合終了にする、ってこと。
> この例外のハンドラーがある場合は、プログラムを安全に続行できます。
というのは、既に失敗した内容は捨てて別の何かでやり直すとかそういう「続行」が可能ということ。
・ファイル名を変更してやり直すとか
・違うカメラから読んでみるとか
(プログラムがバグっている場合は続行しても意味が無いので終了させて修正するしかない)

で、今何が起きているかは掲示板の向こうにいる我々第三者にはわからない。
俺も openCV は使ったこと無いからどこが間違っているかわからない。
・ openCV 自体がバグっている
・元発言者氏のプログラムがバグっている
・環境構築(カメラとの接続とかライブラリのインストールとかもろもろ)に失敗している
・その他(カメラの電源が入っていないとか)
何が起きているのか調査するのが「デバッグ」だよ。

現状ではもっと詳細調べておくれ、としか言いようが無いな・・・
引用返信 編集キー/
■74158 / inTopicNo.9)  Re[7]: USBカメラから画像を読み込みについて
□投稿者/ とっちゃん (284回)-(2014/12/03(Wed) 13:41:57)
とっちゃん さんの Web サイト
No74151 (いち さん) に返信
> とっちゃん さん様、返信ありがとうございます。
>
どうでもいいと言えば、どうでもいいんですが、敬称(さん) にさらに「様」をつけるのは見映えがよくないと思いますよ。
もっとも、私の場合はそもそものハンドルに敬称が含まれているので、これだと3重なんですけどねw


> >>Ctrl+F5で実行した場合、デバッグエラーで停止します。
<<省略>>
> 以下のメッセージが出て停止します(エラーメッセージには、中止・再試行・無視の3つのボタンがあります)
>
> Microsoft Visual C++ Runtime Library
> Debug error!
> Program: ...visual studio
> 2013\Projects\Debug|OpenCV_Test.exe
>
> R6010
> -about() has been called
> (Press Retry to debug the application)
>
これは、ランタイムエラーと呼ばれるものです。
何らかの理由(理由は分かりません)で、abort() 関数が呼ばれて終了しようとしているという場合に発生します。

デバッグ版の場合はこの画面が出ますが、リリース版だと、画面が出ないで終了するか
画面が出てもOKボタンだけだったと思います。

abort() 関数については、C言語のリファレンスを参照してください。


>>while( 1 ){ ... }
>>は、確かに ... の部分を無限ループですね。
>>この部分は問題なさそうです(学校的答えでは、key=='q'の部分に言及してないので三角ですけどw)。
> コンソール画面で「q」を押すと、強制終了すると思ってます。
>
強制終了は、プログラムの世界では、正しい手順を踏まずに途中でプログラムを「強制」的に「終了」させることを言います。
この処理では、'q' を押すとループを抜けて、次の return 0; の行に進みますよね?
なので、終了したりしません。

学校的答えではなくても、その回答だと×です。



>>で、F10でステップ実行していれば問題はないということは、そうではない場合はこのループのどこかで例外が発生する
>>ということですか?
> while( 1 ){ ... }内をコメントをして、そこから1行だけコメントしないで順番に、実行した所、以下の部分でハンドルエラーで出ました。
> cv::imshow(windowNameCapture, frameImage);
>
同じ frameImage を使って、cv::imshow() を連続的に呼び出したらエラーが発生したということでしょうか?


>>例外の詳細は、cv::Exception の内容(デバッガで見れるはずです)を参照すると何かわかるかもしれません。
> 恥ずかしながら、デバッカの内容を読みこなせないのです。
> 参考にしたサイト:http://msdn.microsoft.com/ja-jp/library/d0b8xh0y.aspx
> 参考にした資料:「Visual Studioデバッグ入門」 by 森理 麟(@moririring)さん Lv.1くまー(わんくま同盟 名古屋勉強会 #31)
>
ごく簡単なものでいいので、デバッグのやり方などが載っている書籍などを探して読んでみるとよいと思います。
あと、勉強会や、カンファレンスなどのセッション資料は教科書とは違い、かいつまんで画面に載せたものが大半です。
もちろんそうではない場合もありますが...

ですので、そのセッションも受けていてはじめて内容に意味が出てくる(言外にたくさんのものが詰まっていることが多い)と
思っておくとよいと思いますよ。


>>まずは、その部分とどの処理を行ったときに発生するか(何回目のループなのかまでチェックしておくとよいかもしれませんね)
> 1回目のループで出ます。
>
>>も記載しておくと、回答側としては答えやすい(経験者のカンにも頼れれば、そこにある情報から原因を特定することができる可能性が高まる)と思います。
> 自分には経験者のカンがないです、、、(周りにも経験者がおりません、、、)
>
1回目のループ(最初の呼び出し)でエラーが出るのでしょうか?
それとも、2回目以降(ループを一度以上回った後)に、発生するのでしょうか?

もし、1回目の呼び出し時点でランタイムエラーが出るのだとすると実行環境の問題の可能性があります。
そうではなく、2回目以降の呼び出しとすると実行する方法(プログラムそのもの)の問題の可能性も十分考えられます。

ランタイムエラーは、動かしてみたら継続することが難しい(あるいは問題がある)動作をしたためにエラーとするという意味のもので
種類的には
実行環境の環境設定上の問題(例えば、NVIDIAのボードの機能を使おうとしているのにAMDのボードが搭載されたマシンを使っているなど)が原因で発生するものと、
プログラム自身が問題のある実行方法をとったため、実行できずにエラーになるもの
の2種類があります。

どちらが原因でランタイムエラーが発生しているかはプログラムによるので必ずこうであるということは言えませんが
おそらく今回の場合は後者(プログラムの問題)だと思います。


>
>>さて、一般論はこれくらいとして
>>
>>改めて。。。
>>
>>http://hmatsudaiac.wix.com/venus-robotix#!set-opencv-on-cpp-windows/c1gr5
>>
>>これを参考にしたとありますが、いくつか違っている個所があります。
> 一日、リファレンス等を読んで、どこが間違っているま見てましたが、どこが間違っているのかが分かりませんでした。
>
ソースコードそのものの違いです。

もし、違いがわからないようなら、まずは参考ページにあるソースコードを丸ごとコピー&ペーストして実行してみてください。

それでもエラーが発生するのだとすれば、環境依存の問題の可能性があるので
OpenCVのリファレンスを参考に自分の環境に問題がないかなどを調査してみてください。


>>ステップ実行では問題なくて、ブレークせずに一気に動かすと例外が出るみたいなので
>>処理の実行時間の問題とかはないですかね?
> 一気に動かすという事は、処理が速いからエラーの可能性があるという事ですか?
>
そうです。

ステップ実行は、1行ずつ停止するので、プログラム的にはそれぞれの呼び出しにそれなりの時間がかかっていることになります。
ですが、一気に実行すると途中で停止しないため、ごくごく短時間で処理が行われることになります。

そのあたりはチェック項目としては、重要なポイントといえます。

引用返信 編集キー/
■74159 / inTopicNo.10)  Re[8]: USBカメラから画像を読み込みについて
□投稿者/ いち (6回)-(2014/12/03(Wed) 14:24:20)
2014/12/03(Wed) 14:32:34 編集(投稿者)
2014/12/03(Wed) 14:32:13 編集(投稿者)
2014/12/03(Wed) 14:32:01 編集(投稿者)

No74156 (774RR さん) に返信
774RR様、返信ありがとうございます。

>>R6010
>>-about() has been called
> 正確にコピペしてる?これ about ではなくて abort のはずなんだけど。
abortでした。すみません。

> ・ openCV 自体がバグっている
> ・元発言者氏のプログラムがバグっている
> ・環境構築(カメラとの接続とかライブラリのインストールとかもろもろ)に失敗している
> ・その他(カメラの電源が入っていないとか)
> 何が起きているのか調査するのが「デバッグ」だよ。
>
> 現状ではもっと詳細調べておくれ、としか言いようが無いな・・・

現状の詳細を調べたのです(環境構築、ライブラリ)が、何が原因か分からなかったのですが、参考にしたプログラムを以下に変えたら、ウインドウにカメラから画像を読み込めました。
ただ、なぜ解決したのかまったく分からない為、モヤモヤしております。

include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/opencv_lib.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
using namespace std;

int main(int argc, const char *argv[]){
VideoCapture cap(0);
if (!cap.isOpened()){
return (-1);//open error
}

Mat frame;
while (waitKey(1) != 'q'){
cap >> frame;
if (frame.empty()) continue;
imshow("sample", frame);
}
return(0);
}


引用返信 編集キー/
■74163 / inTopicNo.11)  Re[8]: USBカメラから画像を読み込みについて
□投稿者/ いち (7回)-(2014/12/04(Thu) 11:31:09)
No74158 (とっちゃん さん) に返信
とっちゃん 様、返信ありがとうございます。

> >>で、F10でステップ実行していれば問題はないということは、そうではない場合はこのループのどこかで例外が発生する
> >>ということですか?
>>while( 1 ){ ... }内をコメントをして、そこから1行だけコメントしないで順番に、実行した所、以下の部分でハンドルエラーで出ました。
>>cv::imshow(windowNameCapture, frameImage);
>>
> 同じ frameImage を使って、cv::imshow() を連続的に呼び出したらエラーが発生したということでしょうか?
連続的ではなく、1回目から、エラーが出ました。


> ごく簡単なものでいいので、デバッグのやり方などが載っている書籍などを探して読んでみるとよいと思います。
> あと、勉強会や、カンファレンスなどのセッション資料は教科書とは違い、かいつまんで画面に載せたものが大半です。
> もちろんそうではない場合もありますが...
この本はどうでしょうか?なんとなく、初心者には敷居が高いイメージです、、、
-----実践デバッグ技法 [書籍]オライリー・ジャパンISBN: 4873114063

> もし、違いがわからないようなら、まずは参考ページにあるソースコードを丸ごとコピー&ペーストして実行してみてください。
今まで作成していたプロジェクトではエラーが出たので、新規プロジェクトにソースコードを丸ごとコピー&ペーストをしたら動きました、、、(何か設定がおかしかったのでしょうか?


> ステップ実行は、1行ずつ停止するので、プログラム的にはそれぞれの呼び出しにそれなりの時間がかかっていることになります。
> ですが、一気に実行すると途中で停止しないため、ごくごく短時間で処理が行われることになります。
>
> そのあたりはチェック項目としては、重要なポイントといえます。
リリース時に、エラーが出るので、チェック項目として重要なポイントなのでしょうか?

引用返信 編集キー/
■74167 / inTopicNo.12)  Re[9]: USBカメラから画像を読み込みについて
□投稿者/ とっちゃん (285回)-(2014/12/04(Thu) 14:05:00)
とっちゃん さんの Web サイト
No74163 (いち さん) に返信
>>>>で、F10でステップ実行していれば問題はないということは、そうではない場合はこのループのどこかで例外が発生する
>>>>ということですか?
> >>while( 1 ){ ... }内をコメントをして、そこから1行だけコメントしないで順番に、実行した所、以下の部分でハンドルエラーで出ました。
> >>cv::imshow(windowNameCapture, frameImage);
> >>
>>同じ frameImage を使って、cv::imshow() を連続的に呼び出したらエラーが発生したということでしょうか?
> 連続的ではなく、1回目から、エラーが出ました。
>
ここは、動くソースが手に入ったようなのでとりあえずOKかな?


>
>>ごく簡単なものでいいので、デバッグのやり方などが載っている書籍などを探して読んでみるとよいと思います。
>>あと、勉強会や、カンファレンスなどのセッション資料は教科書とは違い、かいつまんで画面に載せたものが大半です。
>>もちろんそうではない場合もありますが...
> この本はどうでしょうか?なんとなく、初心者には敷居が高いイメージです、、、
> -----実践デバッグ技法 [書籍]オライリー・ジャパンISBN: 4873114063
>
この本、結構難しいことが書いてませんか?
最後の一歩(仕事でもめったに踏み込まないような領域)とは言いませんが、なかなか踏み込まない領域の話も出てた記憶が。。。

現状IDEの使い方(主にデバッガとしての部分)がよくわからないという状況みたいなので
まずは本当の意味での入門書的なものを読んでみるところから始めてみるので十分ではないかと思います。


>>もし、違いがわからないようなら、まずは参考ページにあるソースコードを丸ごとコピー&ペーストして実行してみてください。
> 今まで作成していたプロジェクトではエラーが出たので、新規プロジェクトにソースコードを丸ごとコピー&ペーストをしたら動きました、、、(何か設定がおかしかったのでしょうか?
>
このスレの最初にあったソースを丸ごとコピーしたわけではなくて、■No74159 のソースだとうごいたということですよね?

コンパイルエラーはコンパイル時にわかりますが、実行時のエラーは実行するまでわかりません。
実行した結果エラーが出るという場合、エラーが出ない条件はなにか?を探し出すというデバッグ方法もありますが
今回のような事例だと、動いているコードとの違いを調べたほうがずっと効率よく原因を絞り込めると思います。

まずは、動いているソースコードと動かないソースコードで何が違っているのか?から調べてみてはいかがでしょう?


>
>>ステップ実行は、1行ずつ停止するので、プログラム的にはそれぞれの呼び出しにそれなりの時間がかかっていることになります。
>>ですが、一気に実行すると途中で停止しないため、ごくごく短時間で処理が行われることになります。
>>
>>そのあたりはチェック項目としては、重要なポイントといえます。
> リリース時に、エラーが出るので、チェック項目として重要なポイントなのでしょうか?
>
今回のように時間の概念がある動作においては、ステップ実行したら問題がない(逆もある)とか
デバッグ版だと問題がないがリリース版だと問題が出るなんて言うのは割とよくあることの一つです。

ただし、必ずしもそれが重要というわけではありません。あくまでもステップすることで変化する何かが
影響するような状況の場合。。。というだけですのでご注意を。

引用返信 編集キー/
■74173 / inTopicNo.13)  Re[9]: USBカメラから画像を読み込みについて
□投稿者/ いち (8回)-(2014/12/05(Fri) 09:48:23)
No74158 (とっちゃん さん) に返信
とっちゃん 様、返信ありがとうございます。

>ここは、動くソースが手に入ったようなのでとりあえずOKかな?
OKですが、モヤモヤしております。

>この本、結構難しいことが書いてませんか?
>最後の一歩(仕事でもめったに踏み込まないような領域)とは言いませんが、なかなか踏み込まない領域の話も出てた記憶が。。。
難しいです。さらっと読めないです。

>このスレの最初にあったソースを丸ごとコピーしたわけではなくて、■No74159 のソースだとうごいたということですよね?
新しいプロジェクトを作成して、参考サイトのソースをコピーしたら、動きました。


>コンパイルエラーはコンパイル時にわかりますが、実行時のエラーは実行するまでわかりません。
>実行した結果エラーが出るという場合、エラーが出ない条件はなにか?を探し出すというデバッグ方法もありますが
>今回のような事例だと、動いているコードとの違いを調べたほうがずっと効率よく原因を絞り込めると思います。
今回の事例とは、参考サイトのソースを動かそうとしているから、「動いているソースコードと動かないソースコードで何が違っているのか?」を調べた方がいいでよろしいですか?

>ただし、必ずしもそれが重要というわけではありません。あくまでもステップすることで変化する何かが
>影響するような状況の場合。。。というだけですのでご注意を。
ステップすることで変化する何かが影響場合とは、どういう事でしょうか?
引用返信 編集キー/
■74174 / inTopicNo.14)  Re[10]: USBカメラから画像を読み込みについて
□投稿者/ とっちゃん (286回)-(2014/12/05(Fri) 11:17:48)
とっちゃん さんの Web サイト
No74173 (いち さん) に返信
> >ここは、動くソースが手に入ったようなのでとりあえずOKかな?
> OKですが、モヤモヤしております。
>
そのあたりは、ソースレビューしましょう。自分でw

> >この本、結構難しいことが書いてませんか?
> >最後の一歩(仕事でもめったに踏み込まないような領域)とは言いませんが、なかなか踏み込まない領域の話も出てた記憶が。。。
> 難しいです。さらっと読めないです。
>
最初に読む本ではないですからね。かなりハードル高めだと思います。

> >コンパイルエラーはコンパイル時にわかりますが、実行時のエラーは実行するまでわかりません。
> >実行した結果エラーが出るという場合、エラーが出ない条件はなにか?を探し出すというデバッグ方法もありますが
> >今回のような事例だと、動いているコードとの違いを調べたほうがずっと効率よく原因を絞り込めると思います。
> 今回の事例とは、参考サイトのソースを動かそうとしているから、「動いているソースコードと動かないソースコードで何が違っているのか?」を調べた方がいいでよろしいですか?
>
です。
動いているソースと動いていないソースで違うところが何かを探していき、違っているために発生するものがなにかを
リファレンスなどから確認してください。

そうすると、モヤモヤの部分も解決していくと思います。

> >ただし、必ずしもそれが重要というわけではありません。あくまでもステップすることで変化する何かが
> >影響するような状況の場合。。。というだけですのでご注意を。
> ステップすることで変化する何かが影響場合とは、どういう事でしょうか?

ステップ実行した場合とステップせずに実行した場合で違う部分すべてが対象です。
今回の場合時間の概念が強く存在するため(動画なので当たり前ですが)、ステップする(一つ呼び出すたびに一時停止する)ことで
呼び出し時間が変わります。そういう部分はかなり大きな影響を受けているはずです。

引用返信 編集キー/
■74175 / inTopicNo.15)  Re[11]: USBカメラから画像を読み込みについて
□投稿者/ いち (9回)-(2014/12/05(Fri) 13:49:40)
No74174 (とっちゃん さん) に返信
とっちゃん様、返信ありがとうございます。
>>>ここは、動くソースが手に入ったようなのでとりあえずOKかな?
>>OKですが、モヤモヤしております。
>>
> そのあたりは、ソースレビューしましょう。自分でw
ソースレビューして調べて、モヤモヤしております(入門書読んだくらいではダメなんだろうと思ってます)

> ステップ実行した場合とステップせずに実行した場合で違う部分すべてが対象です。
> 今回の場合時間の概念が強く存在するため(動画なので当たり前ですが)、ステップする(一つ呼び出すたびに一時停止する)ことで
> 呼び出し時間が変わります。そういう部分はかなり大きな影響を受けているはずです。
呼び出し時間が関係するのですね。

リファレンス等読んでいきたいと思います。

ありがとうございました。
解決済み
引用返信 編集キー/
■74176 / inTopicNo.16)  Re[12]: USBカメラから画像を読み込みについて
□投稿者/ とっちゃん (287回)-(2014/12/05(Fri) 15:01:24)
とっちゃん さんの Web サイト
No74175 (いち さん) に返信
>>そのあたりは、ソースレビューしましょう。自分でw
> ソースレビューして調べて、モヤモヤしております(入門書読んだくらいではダメなんだろうと思ってます)
>
んー。。。ここまであえて核心には触れずに(違ってるところは見る人が見れば一目瞭然レベルのはず)来ましたが
どうしても確認する方向に進んでくれないので。。。ポイントを書いておきます。

まずは、最初に提示したソースと最初に提示した参考サイトの違い。

プログラムの中で、影響の出る大きな違いは、
cv::waitKey() に渡す引数の数値です。

この関数が何を行う関数化、渡す引数にどういう意味がありそれがどう影響するのかを
OpenCVのファレンスを見て確認してください。

次に、動いたという新しいソースとそれまで提示されていたものの違い。

新しいソースでは、
if( frame.empty() ) continue; という行があります。

この行、frame.empty() とは何を確認しどういう値を返すのか?
その結果、continue するとどうなるのか
ということについて調べてみてください。

frame.empty() は、OpenCVのリファレンスを、continue は、C++言語のリファレンスを
それぞれ調べることでわかると思います。

違っている個所を探すことがまずできていません。
プログラムが意図した動きにならないということは、どこかに意図しているものとの違いがあることを意味します。
それを探し出し、変更して意図したとおりに動くようにすることがデバッグです。
このとき、一番最初に行うのは間違っている場所を探すことです。

間違い探しと同じなので、動くものと動かないものがある場合その間違い探しをします。
今回の場合は、サンプルのソースと何が違うのか?をきちんと調べ上げることができていれば、
質問することもなく解決しているレベルだと思います。
(ただし、最初に提示したソースがランタイムエラーを発生するソースだった場合の話)。





>>ステップ実行した場合とステップせずに実行した場合で違う部分すべてが対象です。
>>今回の場合時間の概念が強く存在するため(動画なので当たり前ですが)、ステップする(一つ呼び出すたびに一時停止する)ことで
>>呼び出し時間が変わります。そういう部分はかなり大きな影響を受けているはずです。
> 呼び出し時間が関係するのですね。
>
こっちも、なんというか時間の概念が何かがわかっていない気がします。
動画というのがどういうものかはわかりますか?
ビデオカメラからどんなデータが送られてきてそれをどのように表現すればいいかわかりますか?

この辺りはプログラムの話ではなく、そもそも動画って何?何で動いているの?という話です。

リファレンスに出てくるようなものではありません。



解決済みのマークは保持しておきますね。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -