• 締切済み

OpencvでDebug errorが発生します。

初投稿です。 現在、Opencvでカメラキャリブレーション を行うべく、下記を参照にしながらプログラミングを行っております。URL:http://opencv.jp/sample/camera_calibration.html エラーはなくなったのですがDebug erroerが発生します。 その改善策を教えていただきたいです。 C++を初めて一か月の初心者ですが宜しくお願いします。 <開発環境> Visual studio2015 opencv2.4.11 -source code- #pragma warning(push) #pragma warning(disable:4996) #pragma warning ( disable : 4789 ) #include <stdio.h> #include <opencv/cv.h> #include <opencv2/highgui/highgui.hpp> #define CRT_SECURE_NO_WARNINGS #define IMAGE_NUM (15) #define PAT_ROW (7) #define PAT_COL (10) #define PAT_SIZE (PAT_ROW*PAT_COL) #define ALL_POINTS (IMAGE_NUM*PAT_SIZE) #define CHESS_SIZE (24.0) int main(int argc, char *argv[]) { int i, j, k; int corner_count, found; int p_count[IMAGE_NUM]; IplImage *src_img[IMAGE_NUM]; CvSize pattern_size = cvSize(PAT_COL, PAT_ROW); CvPoint3D32f objects[ALL_POINTS]; CvPoint2D32f *corners = (CvPoint2D32f *)cvAlloc(sizeof(CvPoint2D32f) * ALL_POINTS); CvMat object_points; CvMat image_points; CvMat point_counts; CvMat *intrinsic = cvCreateMat(3, 3, CV_32FC1); CvMat *rotation = cvCreateMat(1, 3, CV_32FC1); CvMat *translation = cvCreateMat(1, 3, CV_32FC1); CvMat *distortion = cvCreateMat(1, 4, CV_32FC1); for (i = 0; i < IMAGE_NUM; i++) { // src_img[IMAGE_NUM] = cvLoadImage("CameraTestImage1", CV_LOAD_IMAGE_COLOR); char buf[32]; sprintf(buf, "CameraTestImage1/ % 02d.JPG", i); src_img[i] = cvLoadImage("c:\\opencvCalib\\caliblation\\CameraTestImage1/ % 02d.JPG"); // sprintf(buf, "c:\\opencvCalib\\caliblation\\CameraTestImage1/ % 02d.JPG", i); if ((src_img[i] = cvLoadImage(buf, CV_LOAD_IMAGE_COLOR)) == NULL) { fprintf(stderr, "cannot load image file : %s\n", buf); // } } for (i = 0; i < IMAGE_NUM; i++) { for (j = 0; j < PAT_ROW; j++) { for (k = 0; k < PAT_COL; k++) { objects[i * PAT_SIZE + j * PAT_COL + k].x = j * CHESS_SIZE; objects[i * PAT_SIZE + j * PAT_COL + k].y = k * CHESS_SIZE; objects[i * PAT_SIZE + j * PAT_COL + k].z = 0.0; } } } cvInitMatHeader(&object_points, ALL_POINTS, 3, CV_32FC1, objects); int found_num = 0; cvNamedWindow("Calibration", CV_WINDOW_AUTOSIZE); for (i = 0; i < IMAGE_NUM; i++) { found = cvFindChessboardCorners(src_img[i], pattern_size, &corners[i * PAT_SIZE], &corner_count); fprintf(stderr, "%02d...", i); if (found) { fprintf(stderr, "ok\n"); found_num++; } else { fprintf(stderr, "fail\n"); } IplImage *src_gray = cvCreateImage(cvGetSize(src_img[i]), IPL_DEPTH_8U, 1); cvCvtColor(src_img[i], src_gray, CV_BGR2GRAY); cvFindCornerSubPix(src_gray, &corners[i * PAT_SIZE], corner_count, cvSize(3, 3), cvSize(-1, -1), cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03)); cvDrawChessboardCorners(src_img[i], pattern_size, &corners[i * PAT_SIZE], corner_count, found); p_count[i] = corner_count; cvShowImage("Calibration", src_img[i]); cvWaitKey(0); } cvDestroyWindow("Calibration"); if (found_num != IMAGE_NUM) return -1; cvInitMatHeader(&image_points, ALL_POINTS, 1, CV_32FC2, corners); cvInitMatHeader(&point_counts, IMAGE_NUM, 1, CV_32SC1, p_count); cvCalibrateCamera2(&object_points, &image_points, &point_counts, cvSize(640, 480), intrinsic, distortion); CvMat sub_image_points, sub_object_points; int base = 0; cvGetRows(&image_points, &sub_image_points, base * PAT_SIZE, (base + 1) * PAT_SIZE); cvGetRows(&object_points, &sub_object_points, base * PAT_SIZE, (base + 1) * PAT_SIZE); cvFindExtrinsicCameraParams2(&sub_object_points, &sub_image_points, intrinsic, distortion, rotation, translation); CvFileStorage *fs; fs = cvOpenFileStorage("camera.xml", 0, CV_STORAGE_WRITE); cvWrite(fs, "intrinsic", intrinsic); cvWrite(fs, "rotation", rotation); cvWrite(fs, "translation", translation); cvWrite(fs, "distortion", distortion); cvReleaseFileStorage(&fs); for (i = 0; i < IMAGE_NUM; i++) { cvReleaseImage(&src_img[i]); } return 0; }

noname#229359
noname#229359

みんなの回答

  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.2

まず、スタックトレースの使い方を覚えてください。 Visual Studio 2015 をお使いなら、「デバッグ開始」で実行すると、エラーが出た時にスタックトレースが表示されたはずです。 エラーが発生した場所が表示されるはずですので、そこからエラーの原因を探ることができます。 私の環境で実行した時は、cvFindChessboardCorners を呼んでいる箇所で同じエラーが発生していました。 おそらくプログラム中で指定されているファイルが存在しないことが原因と思われます。

  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.1

debug error とは何でしょうか? 何かエラーメッセージが出ているなら、内容を正確に書いてください。

noname#229359
質問者

補足

コメントありがとうございます。 エラー内容と致しましては以下の通りです。 ハンドルされない例外が 0x76C4D8A8 で発生しました (test5.exe 内): Microsoft C++ の例外: cv::Exception (メモリの場所 0x004EE9B4)。 コマンドプロンプロには OpenCV Error: Null pointer (NULL array pointer is passed) in cvGetMat, file C:\builds\2_4_PackSlave-win32-vc12-shared\opencv\modules\core\src\array.cpp, line 2382

関連するQ&A

  • OpenCvのCvMatについて教えて下さい。

    いつもお世話になっております。 質問ですが、配列で画像のピクセル値(R,G,B)を行列に代入する場合は CvMat *points = cvCreateMat (size, 1, CV_32FC3); ピクセルの値を行列へ代入 for (i = 0; i < size; i++) { points->data.fl[i * 3 + 0] = (uchar) src_img->imageData[i * 3 + 0]; points->data.fl[i * 3 + 1] = (uchar) src_img->imageData[i * 3 + 1]; points->data.fl[i * 3 + 2] = (uchar) src_img->imageData[i * 3 + 2]; } のような流れでできますが、 これをピクセル値ではなく座標(x,y)を代入するにはどのように変更したらよいでしょうか。教えて下さい。

  • OpenCVを用いたヒストグラムの比較について

     現在画像の類似度を求めるために、OpenCV1.0を使って色のヒストグラムの距離を求めるということを行っております。OpenCVで公開されているヒストグラム間の距離のサンプルプログラムを使って行っているのですが、結果があまり芳しくないためいろいろ調べなおしたところ、減色処理、量子化というワードにたどり着きました。  しかし調べてみてもいまいち分からず、行き詰っているのが現状です。どなたか減色処理や量子化について詳しい人がおりましたら、是非回答のほうよろしくお願いします。以下がOpenCVのコードなのですが、どこの部分をどのように変えたらそれが実現できるのかも是非回答お願いいたします。 #include <cv.h> #include <highgui.h> #include <math.h> #include <stdio.h> int main (int argc, char **argv) { char text[16]; int i, hist_size = 256, sch = 0; float range_0[] = { 0, 256 }; float *ranges[] = { range_0 }; double tmp, dist = 0; IplImage *src_img1 = 0, *src_img2 = 0, *dst_img1[4] = { 0, 0, 0, 0 }, *dst_img2[4] = { 0, 0, 0, 0}; CvHistogram *hist1, *hist2; CvFont font; CvSize text_size; // (1)二枚の画像を読み込む.チャンネル数が等しくない場合は,終了 if (argc >= 3) { src_img1 = cvLoadImage (argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); src_img2 = cvLoadImage (argv[2], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); } if (src_img1 == 0 || src_img2 == 0) return -1; if (src_img1->nChannels != src_img2->nChannels) return -1; // (2)入力画像のチャンネル数分の画像領域を確保 sch = src_img1->nChannels; for (i = 0; i < sch; i++) { dst_img1[i] = cvCreateImage (cvSize (src_img1->width, src_img1->height), src_img1->depth, 1); dst_img2[i] = cvCreateImage (cvSize (src_img2->width, src_img2->height), src_img2->depth, 1); } // (3)ヒストグラム構造体を確保 hist1 = cvCreateHist (1, &hist_size, CV_HIST_ARRAY, ranges, 1); hist2 = cvCreateHist (1, &hist_size, CV_HIST_ARRAY, ranges, 1); // (4)入力画像がマルチチャンネルの場合,画像をチャンネル毎に分割 if (sch == 1) { cvCopy (src_img1, dst_img1[0], NULL); cvCopy (src_img2, dst_img2[0], NULL); } else { cvSplit (src_img1, dst_img1[0], dst_img1[1], dst_img1[2], dst_img1[3]); cvSplit (src_img2, dst_img2[0], dst_img2[1], dst_img2[2], dst_img2[3]); } // (5)ヒストグラムを計算,正規化して,距離を求める for (i = 0; i < sch; i++) { cvCalcHist (&dst_img1[i], hist1, 0, NULL); cvCalcHist (&dst_img2[i], hist2, 0, NULL); cvNormalizeHis

  • OpenCVの連続画像読み込みについて

    こんにちは。 連続画像の読み込みが出来なくて困ってます。 今まではVisualStudioを使い、読み込んでいたので IplImage* src_img = cvLoadImage("sample.bmp", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if (src_img == NULL){ return 0; } のように書き直して動かしていたのですが http://opencv.jp/sample/initialization.html#combine の画像の連結のところで if (argc < 2) { return 1; } else { img_num = argc - 1; img = (IplImage **) cvAlloc (sizeof (IplImage *) * img_num); for (i = 0; i < img_num; i++) { img[i] = cvLoadImage (argv[i + 1], CV_LOAD_IMAGE_COLOR); if (img[i] == 0) return -1; } } ここをどのようにすれば連続画像を読み込めるようになるのか教えていただけないでしょうか。 よろしくお願いいたします。

  • opencv、プログラム初心者です。

    opencv、プログラム初心者です。 openCV2.0のサンプルコードで「k-meansクラスタリングによる画像分割,減色」とあります。サンプルは以下の通りです。 #include <cv.h> #include <highgui.h> using namespace cv; int main (int argc, char **argv) { const int cluster_count = 10; /* number of cluster */ // (1)load a specified file as a 3-channel color image const char *imagename = argc > 1 ? argv[1] : "../image/lena.jpg"; Mat src_img = imread(imagename); if(!src_img.data) return -1; // (2)reshape the image to be a 1 column matrix Mat points; src_img.convertTo(points, CV_32FC3); points = points.reshape(3, src_img.rows*src_img.cols); // (3)run k-means clustering algorithm to segment pixels in RGB color space Mat_<int> clusters(points.size(), CV_32SC1); Mat centers; kmeans(points, cluster_count, clusters, cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0), 1, KMEANS_PP_CENTERS, ¢ers); // (4)make a each centroid represent all pixels in the cluster Mat dst_img(src_img.size(), src_img.type()); MatIterator_<Vec3f> itf = centers.begin<Vec3f>(); MatIterator_<Vec3b> itd = dst_img.begin<Vec3b>(), itd_end = dst_img.end<Vec3b>(); for(int i=0; itd != itd_end; ++itd, ++i) { Vec3f color = itf[clusters(1,i)]; (*itd)[0] = saturate_cast<uchar>(color[0]); (*itd)[1] = saturate_cast<uchar>(color[1]); (*itd)[2] = saturate_cast<uchar>(color[2]); } // (5)show source and destination image, and quit when any key pressed namedWindow("src_img", CV_WINDOW_AUTOSIZE); imshow("src_img", src_img); namedWindow("dst_img", CV_WINDOW_AUTOSIZE); imshow("dst_img", dst_img); waitKey(0); return 0; } これをDebugしてみたのですが、 ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 '¢ers' : 定義されていない識別子です。 と出てきます。'¢ers'って何なのでしょうか?どうやれば動かせるようになるか、よろしくお願いします。

  • OpenCVでサンプルコードを使うとエラーが出ます

    環境はVidualStudio2008、OpenCVは2.1のバージョンを利用しています。 OpenCVのテンプレートマッチングのサンプルを利用したところエラーが発生しました。 ソースは以下のものを使っています。 ところどころに入っているprintfは私が自分で入れたものですがこれが原因であるとは考えにくいのです。 エラーは添付したような画像で現れます。 またデバッグしたところ [下のフレームは間違っているか、または見つかりません。KernelBase.dll に対して読み込まれたシンボルはありません。] KernelBase.dll!76b7b9bc() このような文章も表示されました。 どうすれば解決できるでしょうか。 #include <cv.h> #include <highgui.h> int main (int argc, char **argv) { double min_val, max_val; CvPoint min_loc, max_loc; CvSize dst_size; IplImage *src_img, *tmp_img, *dst_img; argv[1]="○○"; argv[2]="○○"; argc=3; printf("1complete\n"); cvNamedWindow ("Image", 1); src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR); tmp_img = cvLoadImage (argv[2], CV_LOAD_IMAGE_COLOR); if(argc != 3 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR))==0||(tmp_img = cvLoadImage (argv[2], CV_LOAD_IMAGE_COLOR))==0) return -1; printf("2complete\n"); // (1)探索画像全体に対して,テンプレートのマッチング値(指定した手法に依存)を計算 dst_size = cvSize (src_img->width - tmp_img->width + 1, src_img->height - tmp_img->height + 1); printf("2-1complete\n"); dst_img = cvCreateImage (dst_size, IPL_DEPTH_32F, 1);    //ここで動作停止 printf("2-2complete\n"); cvMatchTemplate (src_img, tmp_img, dst_img, CV_TM_CCOEFF_NORMED); printf("2-3complete\n"); cvMinMaxLoc (dst_img, &min_val, &max_val, &min_loc, &max_loc, NULL); printf("3complete\n"); // (2)テンプレートに対応する位置に矩形を描画 cvRectangle (src_img, max_loc, cvPoint (max_loc.x + tmp_img->width, max_loc.y + tmp_img->height), CV_RGB (255, 0, 0), 3); printf("4complete\n"); cvShowImage ("Image", src_img); printf("ALL COMPLETE!\n"); cvWaitKey (0); cvDestroyWindow ("Image"); cvReleaseImage (&src_img); cvReleaseImage (&tmp_img); cvReleaseImage (&dst_img); return 0; }

  • OpenCV2.2でのk-means法について

    プログラミング初心者です。 今回、OpenCV2.2を使って画像処理(クラスタリング)をk-means法で行うことになりました。 Visual C++で以下のサンプルコードをデバッグしてみたのですが実行できません。 #include "stdafx.h" #include "C:\\OpenCV2.2\\include\\opencv\\highgui.h" #include "C:\\OpenCV2.2\\include\\opencv\\cv.h" #include "opencv2\\opencv.hpp" using namespace cv; //int _tmain(int argc, _TCHAR* argv[]) int main(int argc , char **argv) { const int cluster_count = 10; /* number of cluster */ // (1)load a specified file as a 3-channel color image const char *imagename = argc > 1 ? argv[1] : "C:\Penguins.jpg"; Mat src_img = imread(imagename); if(!src_img.data) return -1; // (2)reshape the image to be a 1 column matrix Mat points; src_img.convertTo(points, CV_32FC3); points = points.reshape(3, src_img.rows*src_img.cols); // (3)run k-means clustering algorithm to segment pixels in RGB color space Mat_<int> clusters(points.size(), CV_32SC1); Mat centers; kmeans(points, cluster_count, clusters, cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0), 1, KMEANS_PP_CENTERS, &centers); // (4)make a each centroid represent all pixels in the cluster Mat dst_img(src_img.size(), src_img.type()); MatIterator_<Vec3f> itf = centers.begin<Vec3f>(); MatIterator_<Vec3b> itd = dst_img.begin<Vec3b>(), itd_end = dst_img.end<Vec3b>(); for(int i=0; itd != itd_end; ++itd, ++i) { Vec3f color = itf[clusters(1,i)]; (*itd)[0] = saturate_cast<uchar>(color[0]); (*itd)[1] = saturate_cast<uchar>(color[1]); (*itd)[2] = saturate_cast<uchar>(color[2]); } // (5)show source and destination image, and quit when any key pressed namedWindow("src_img", CV_WINDOW_AUTOSIZE); imshow("src_img", src_img); namedWindow("dst_img", CV_WINDOW_AUTOSIZE); imshow("dst_img", dst_img); waitKey(0); return 0; } デバッグすると、ウィンドウが一瞬だけ立ち上がってすぐに消えてしまいます。 最後に、 「プログラム '[2568] k-means1.exe: ネイティブ' はコード -1 (0xffffffff) で終了しました。」 のメッセージが残されています。 ソースにエラーがあるわけでもなさそうなので困っています。 何らかの対処法はあるのでしょうか?

  • OpenCVのエラーが取れません。

    VC++にてOpenCVを使って画像処理を行っています。 cvHoughCircles関数を使ってハフ変換による円検出をしているのですが、 「Null pointer(NULL array pointer is passed)  in function cvGetMat,C\User\VP\opencv\cxcore\src\cxarry.cpp(2780)  Press"Abort"to terminate application. Press"Retry"to debug(if the app is running under debugger). Press"Ignore"to continue(this is not safe).」 というエラーが出てしまいます。 これはいったいどういったエラーなのでしょうか? プログラムは以下の通りです。 //-------------------------------------------------- #include <stdio.h> #include <cv.h> #include <highgui.h> int main (int argc, char **argv) { int i; float *p; IplImage *src_img = 0, *src_img_gray = 0; CvMemStorage *storage; CvSeq *circles = 0; char *filename = "lena.jpg"; IplImage *image; //画像の読み込み・平滑化・二値化 image = cvLoadImage(filename, 0); // 0: グレイスケールで読み込む // (2)ハフ変換のための前処理(画像の平滑化を行なわないと誤検出が発生しやすい) cvSmooth (src_img_gray, src_img_gray, CV_GAUSSIAN, 11, 11, 0, 0); storage = cvCreateMemStorage (0); // (3)ハフ変換による円の検出と検出した円の描画 circles = cvHoughCircles (src_img_gray, storage, CV_HOUGH_GRADIENT, 1, 100, 20, 50, 10, MAX (src_img_gray->width, src_img_gray->height)); for (i = 0; i < circles->total; i++) { p = (float *) cvGetSeqElem (circles, i); cvCircle (src_img, cvPoint (cvRound (p[0]), cvRound (p[1])), 3, CV_RGB (0, 255, 0), -1, 8, 0); cvCircle (src_img, cvPoint (cvRound (p[0]), cvRound (p[1])), cvRound (p[2]), CV_RGB (255, 0, 0), 3, 8, 0); } // (4)検出結果表示用のウィンドウを確保し表示する cvNamedWindow ("circles", 1); cvShowImage ("circles", src_img); cvWaitKey (0); cvDestroyWindow ("circles"); cvReleaseImage (&src_img); cvReleaseImage (&src_img_gray); cvReleaseMemStorage (&storage); return 0; } //----------------------------------------------------- 解決方法など分かりましたら、よろしくお願いいたします。

  • OpenCV 2値化について

    いつもお世話になっております。 画像の2値化(黒は全てゼロ、白は全て255)をした画像bw_imgを用意して 左上端から11×11サイズのROIに切り取って決まった処理をかけていこうとしていますが、 2値化した画像をROIで保持させることができず、困っています。 int main() { //画像の2値化処理用変数 IplImage *src_img = 0, *dst_img = 0, *bw_img = 0; IplImage *src_img_gray = 0; IplImage *tmp_img, *out_img, *lap_img; CvMemStorage *storage = cvCreateMemStorage(0); CvSeq *contours = 0; // (1)画像を読み込み、グレースケール化(src_img_gray)、二値化(tmp_img) src_img = cvLoadImage("C:\\Users...\\サンプル画像\\sample.jpg", CV_LOAD_IMAGE_COLOR); tmp_img = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1); src_img_gray = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1);//もとはIPL_DEPTH_8U cvCvtColor(src_img, src_img_gray, CV_BGR2GRAY); cvAdaptiveThreshold(src_img_gray, tmp_img, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 7, 8); //11×11 走査用変数 dst_img = cvCreateImage(cvGetSize(tmp_img), IPL_DEPTH_8U, 1); bw_img = cvCreateImage(cvGetSize(tmp_img), IPL_DEPTH_8U, 1); out_img = cvCreateImage(cvGetSize(tmp_img), IPL_DEPTH_8U, 1); cvThreshold(tmp_img, bw_img, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU); for (x = 0; x < bw_img->width; x++){ // x 座標を 1ピクセルずつ進める for (y = 0; y < bw_img->height; y++){ // y 座標を 1ピクセルずつ進める //(1) 11×11ピクセルに切り取って2値化する。 cvCopy(bw_img, dst_img); lap_img = cvCreateImage(cvSize(11, 11), IPL_DEPTH_8U, 1); CvMat *sub = cvCreateMatHeader(11, 11, CV_8UC1); cvGetSubRect(bw_img, sub, cvRect(y, x, 11, 11)); //コピー画像から11×11切り取り。 cvThreshold(sub, lap_img, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU); //2値化、結果はlap_img. uchar iro = lap_img->imageData[lap_img->widthStep * (y + 6) + (x + 6)]; if (iro ==0){ →ここでどうみても黒なのにiroに「238」「71」などの値が入っています。 roiで切り取ったlap_imgが2値になっていません。 何が問題で2値化できていないのでしょうか。 どうすると2値化した画像(lap_img)を決まったサイズのウィンドウで扱えるでしょうか。 もしおわかりでしたらヒントでも結構ですのでぜひ教えてください。 よろしくお願いします。

  • OpenCV

    いつもお世話になっております。 添付の2値画像からハフ関数で直線抽出したいのですが、うまく行かず困っています。 エラーは表示されず、ただグレー 一色の出力です。 閾値、投票数、最小長さ、など値をいろいろ変えてみたのですがうまくいきません。 どなたか原因がおわかりであればぜひ教えてください。 よろしくお願い致します。 '================================================== ’void Sample(char *FilePath){ int i; float *line, rho, theta; double a, b, x0, y0; IplImage *src_img_std = 0, *src_img_prob = 0, *src_img_gray = 0; CvMemStorage *storage; CvSeq *lines = 0; CvPoint *point, pt1, pt2; src_img_gray = cvLoadImage(FilePath, CV_LOAD_IMAGE_GRAYSCALE); storage = cvCreateMemStorage(0); // (3)標準的ハフ変換による線の検出と検出した線の描画 lines = cvHoughLines2(src_img_gray, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI / 180, 1, 1, 0); for (i = 0; i <lines->total; i++) { line = (float *)cvGetSeqElem(lines, i); rho = line[0]; theta = line[1]; a = cos(theta); b = sin(theta); x0 = a * rho; y0 = b * rho; pt1.x = cvRound(x0 + 1000 * (-b)); pt1.y = cvRound(y0 + 1000 * (a)); pt2.x = cvRound(x0 - 1000 * (-b)); pt2.y = cvRound(y0 - 1000 * (a)); cvLine(src_img_std, pt1, pt2, CV_RGB(255, 0, 0), 3, 8, 0); } cvNamedWindow("Hough_line_standard", CV_WINDOW_AUTOSIZE); cvShowImage("Hough_line_standard", src_img_std); cvWaitKey(0); cvDestroyWindow("Hough_line_standard");

  • OpenCV2.3 のエラー

    Open CV2.3をVisual Studio2013 expresssに設定しました。 が、プログラムを実行すると 「エラー 3 error LNK1107: ファイルが無効であるか、または壊れています: 0x10B000 を読み取れません。 C:\Program Files\opencv\build\x64\vc10\staticlib\IlmImf.pdb...」 と表示されてしまい、困っています。 エラー原因は[リンカー]-[入力]-[追加の依存ファイル]の設定でしょうか。 当初、libとstaticlibフォルダの中にある、拡張子pbdを含む、重複なしのすべてのファイルを[追加の依存ファイル]に設定していましたが、これがエラーの原因かと思い、 libとstaticlibフォルダ内の、拡張子libのみに修正しました。 が、同じエラーが依然として出ています。 プログラムは以下の内容で、単純に画像を表示させるだけのものです。 ============================================= #include <cxcore.h> #include <cv.h> #include <highgui.h> int _tmain(int argc) { IplImage *src_img = 0, *dst_img; // (1)画像を読み込む src_img = cvLoadImage("C\\Users\\...\\thNDM091S8.jpg", CV_LOAD_IMAGE_COLOR); // (6)画像の表示 cvNamedWindow("Fitting", CV_WINDOW_AUTOSIZE); cvShowImage("Fitting", src_img); cvWaitKey(0); cvDestroyWindow("Fitting"); cvReleaseImage(&src_img); return 0; } ============================================== どこを直せばいいでしょうか。 いろいろと調べましたがわかりませんので、教えていただけると助かります。 よろしくお願いいたします。

専門家に質問してみよう