ページ 11

エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 14:04
by kazu
まず環境はVisualstudio2013でC++のWin10を使用しています。

下記のアンプルプログラムを動かしたいのですが、エラーLNK2001とLNK1120のエラーがでて動きません。プログラム初心者なのでわかる方いれば教えてほしいです。

#include <iostream>
#include <opencv2/opencv.hpp>
#include "lsd.h"

cv::Mat img;
int n_lines;
double* lines;

void change_th_lsd(int nfa, void* dummy)
{
cv::Mat result = img.clone();
for (int i = 0; i < n_lines; i++)
{
const double *line = &lines[i * 7];
if (nfa < line[6])
{
const cv::Point p1(line[0], line[1]);
const cv::Point p2(line[2], line[3]);
cv::line(result, p1, p2, cv::Scalar(0, 0, 255));
}
}
cv::imshow("result_image", result);
}

int main(int argc, char *argv[])
{
//画像をグレースケールとして読み込み
img = cv::imread(argv[1], 0);

//LSD用画像に変換><
double *dat = new double[img.rows * img.cols];
for (int y = 0; y < img.rows; y++)
for (int x = 0; x < img.cols; x++)
dat[y * img.cols + x] = img.at<unsigned char>(y, x);

//LSD処理
lines = lsd(&n_lines, dat, img.cols, img.rows);

//しきい値の最大値と最小値をもってくる
int max_NFA = 0;
for (int i = 0; i < n_lines; i++)
max_NFA = std::max(max_NFA, static_cast<int>(lines[i * 7 + 6]));

//結果描画用画像
cv::cvtColor(img, img, CV_GRAY2RGB);

//結果表示用ウィンドウ
cv::namedWindow("result_image");
cv::createTrackbar("NFA", "result_image", NULL, max_NFA, change_th_lsd);
cv::setTrackbarPos("NFA", "result_image", max_NFA);

//結果表示
cv::imshow("result_image", img);
cv::waitKey(0);
}

エラー内容は、
①error LNK2001: 外部シンボル ""double * __cdecl lsd(int *,double *,int,int)" (?lsd@@YAPEANPEAHPEANHH@Z)" は未解決です。
②error LNK1120: 1 件の未解決の外部参照

この二つです。
参考にしたサイトです。http://daily.belltail.jp/?p=1153

お願いします。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 14:24
by usao
lsd なる名前の関数の実装が存在していない.

想像ですが,
lsd.hと対になるlsd.cとかlsd.cppみたいな名前のファイルがあって
それをプロジェクトに加えれば良いのではないでしょうか.

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 15:19
by C6b14
この行をコメントにして 動かなくしたら どうなりますか。

コード:

//LSD処理
// lines = lsd(&n_lines, dat, img.cols, img.rows);

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 15:41
by C6b14
これはlsd.cと書いてあるけどlsd.cpp (C++)だと画がでますね。(上の行をコメントにしたら)

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 15:54
by C6b14
実装してない関数を呼んでいるきがします。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 16:03
by kazu
>>
C6b14 さんが書きました:この行をコメントにして 動かなくしたら どうなりますか。

コード:

//LSD処理
// lines = lsd(&n_lines, dat, img.cols, img.rows);
回答ありがとうございます。

コメントにしたらエラーはなくなりました。

実行してみたらうまく結果が出なかったので、少しプログラム変えてみました。
グレースケール化するところをIplImage* loadImage = cvLoadImage("xx", CV_LOAD_IMAGE_GRAYSCALE);に変えました。

実行したら「ハンドルされない例外が 0x00007FFAF2497788 で発生しました」というエラーが発生してしました。まだこのプログラムを完全に理解できていないので…

もしこうしたほうがいいよっていうのがあれば教えていただきたいです。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 16:18
by kazu
ブレークポイントが発生しました。それかこういうエラーも出てきてしまいました。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 16:32
by C6b14
このプログラムは怪しいです。サイトも少し変です。ここにhttp://opencv.jp/cookbook/opencv_img.html似た処理があるのでこちらがいいです。全部そのままで動作しました。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 16:45
by C6b14
マトリックス演算をこのレベルでやるとなるとすこし違います。どういうところがポイントなのでしょう。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 16:48
by みけCAT
ソースコードを提示する際は、BBCodeをが有効な(無効にしていない)状態でBBCodeのcodeタグで囲んでいただけると、見やすくてありがたいです。
kazu さんが書きました:グレースケール化するところをIplImage* loadImage = cvLoadImage("xx", CV_LOAD_IMAGE_GRAYSCALE);に変えました。
kazuさんのもとのプログラムにloadImageは無いようですが、具体的にどのようなコードにしたのですか?
初期化されていないポインタをデリファレンスすると、アクセス違反になるかもしれません。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 16:49
by kazu
>>
C6b14 さんが書きました:このプログラムは怪しいです。サイトも少し変です。ここにhttp://opencv.jp/cookbook/opencv_img.html似た処理があるのでこちらがいいです。全部そのままで動作しました。
そうなんですか、ありがとうございます。
そのサイトから確率的Hough変換のプログラムをビルドしてみたら、エラーなく動きましたが、
実行結果が出ずデバックが終わってしまいます。
なにか設定とか悪いのでしょうか…

いろいろ聞いてすいません、もしわかれば教えていただきたいです。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 16:53
by kazu
>>みけCATさん回答ありがとうございます

初めてだったので…やり方がわかりませんでした。次回からはそうします。
http://blog.livedoor.jp/juggleryou/arch ... ここを参考にしました

ほんとのプログラム初心者なので…なにかさっぱりわからないのです。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 17:05
by C6b14
正常に動きました。もとの画像の(.bmp,.png,.jpgとか)読み込みはどうですか?

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 17:17
by kazu
>>
C6b14 さんが書きました:正常に動きました。もとの画像の(.bmp,.png,.jpgとか)読み込みはどうですか?
実行結果が出ないので読み込まれてはないんじゃないかなと思います。でもプロジェクトにはxx.jpgというファイルで入れてあります。

プログラムを変えるところは画像のところだけですよね??
cv::Mat src_img = cv::imread("../../image/「building.png」", 1);の「」の部分を結果を出したい画像の
ファイル名に変えるだけですよね??

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 17:27
by C6b14
たぶん勘違いしていると思うのですが/「building.png」", がきになるので もう一度確認お願いします。(スペースが入ると読めないかも)
それと「」があるのかどうか?

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 17:33
by C6b14
それと ("../../image/ は d:/building.png とかの絶対アドレスの方が安全です。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 17:41
by kazu
>>
C6b14 さんが書きました:たぶん勘違いしていると思うのですが/「building.png」", がきになるので もう一度確認お願いします。(スペースが入ると読めないかも)
それと「」があるのかどうか?
サンプル画像「building.png」入れて実行してもダメでした。
「」はプロジェクトにあるはずです。

よく出力結果?を見てみたら、「PDB ファイルを開けないか、ファイルが見つかりません。」
こういうエラーっぽいのがありました。これが原因ですかね??

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 17:45
by usao
オフトピック
>コメントにしたらエラーはなくなりました。

何をしたいのか(何を目指しているのか)わからないのですが…

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 17:56
by kazu
>>usaoさん

したいことは線分検出ですね。
うまくプログラムが動かないというか、結果が出ないって感じです。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 17:57
by C6b14
”「」はプロジェクトにあるはずです。”は間違いのはず。「building.png」はあり得ないのでbuilding.pngに変えて下さい。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 17:59
by kazu
>>
C6b14 さんが書きました:”「」はプロジェクトにあるはずです。”は間違いのはず。「building.png」はあり得ないのでbuilding.pngに変えて下さい。
説明不足でした、「」の中のファイルをプロジェクトに入れてあるってことです。
プログラム上は、cv::Mat src_img = cv::imread("../../image/building.png", 1);にしています。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 18:10
by C6b14
そうゆうことでしたらその画像をD:/ かC:/にコピーしてcv::imread("d:/building.png", 1);のようにすること。これをしないと堂々巡りになってしまいます。絶対アドレスが絶対いいです。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 18:14
by kazu
>>
C6b14 さんが書きました:そうゆうことでしたらその画像をD:/ かC:/にコピーしてcv::imread("d:/building.png", 1);のようにすること。これをしないと堂々巡りになってしまいます。絶対アドレスが絶対いいです。

できました。長々とご指導ありがとうございました。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月06日(火) 22:10
by hide
オフトピック
Dドライブなんぞを絶対アドレスに指定されたら100%動かない環境とか出てくるけどそれをそんな勧め方していいのかな

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月07日(水) 09:24
by usao
オフトピック
それ以前に,元の話は放り投げて全く別のプログラム使うことになってるっぽいし.
ハフ変換とLSDとじゃ結果がわりと異なるハズなんだけどほんとにそれでいいのかっていう.
まぁ「解決」としてるみたいだからどうでもいいのだろうけど.

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月07日(水) 10:05
by C6b14
どちらもOpenCVで線分検出を行うプログラムです。質問者のかたからの投稿にある通りです。画像を見れば一目瞭然です。
>したいことは線分検出ですね。

Re: エラーLNK2001とLNK1120のエラーが消えなくて困っています

Posted: 2016年12月07日(水) 10:45
by C6b14
一応念のため数学演算のレベルを確認したのには「質問者の答え」はなかったみたいです。プログラムの違いは演算レベルの違いです。
>マトリックス演算をこのレベルでやるとなるとすこし違います。どういうところがポイントなのでしょう。