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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kazu

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

#1

投稿記事 by kazu » 8年前

まず環境は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

お願いします。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

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

#2

投稿記事 by usao » 8年前

lsd なる名前の関数の実装が存在していない.

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

C6b14

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

#3

投稿記事 by C6b14 » 8年前

この行をコメントにして 動かなくしたら どうなりますか。

コード:

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

C6b14

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

#4

投稿記事 by C6b14 » 8年前

これはlsd.cと書いてあるけどlsd.cpp (C++)だと画がでますね。(上の行をコメントにしたら)

C6b14

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

#5

投稿記事 by C6b14 » 8年前

実装してない関数を呼んでいるきがします。

kazu

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

#6

投稿記事 by kazu » 8年前

>>
C6b14 さんが書きました:この行をコメントにして 動かなくしたら どうなりますか。

コード:

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

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

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

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

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

kazu

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

#7

投稿記事 by kazu » 8年前

ブレークポイントが発生しました。それかこういうエラーも出てきてしまいました。

C6b14

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

#8

投稿記事 by C6b14 » 8年前

このプログラムは怪しいです。サイトも少し変です。ここにhttp://opencv.jp/cookbook/opencv_img.html似た処理があるのでこちらがいいです。全部そのままで動作しました。

C6b14

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

#9

投稿記事 by C6b14 » 8年前

マトリックス演算をこのレベルでやるとなるとすこし違います。どういうところがポイントなのでしょう。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#10

投稿記事 by みけCAT » 8年前

ソースコードを提示する際は、BBCodeをが有効な(無効にしていない)状態でBBCodeのcodeタグで囲んでいただけると、見やすくてありがたいです。
kazu さんが書きました:グレースケール化するところをIplImage* loadImage = cvLoadImage("xx", CV_LOAD_IMAGE_GRAYSCALE);に変えました。
kazuさんのもとのプログラムにloadImageは無いようですが、具体的にどのようなコードにしたのですか?
初期化されていないポインタをデリファレンスすると、アクセス違反になるかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kazu

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

#11

投稿記事 by kazu » 8年前

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

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

kazu

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

#12

投稿記事 by kazu » 8年前

>>みけCATさん回答ありがとうございます

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

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

C6b14

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

#13

投稿記事 by C6b14 » 8年前

正常に動きました。もとの画像の(.bmp,.png,.jpgとか)読み込みはどうですか?

kazu

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

#14

投稿記事 by kazu » 8年前

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

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

C6b14

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

#15

投稿記事 by C6b14 » 8年前

たぶん勘違いしていると思うのですが/「building.png」", がきになるので もう一度確認お願いします。(スペースが入ると読めないかも)
それと「」があるのかどうか?

C6b14

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

#16

投稿記事 by C6b14 » 8年前

それと ("../../image/ は d:/building.png とかの絶対アドレスの方が安全です。

kazu

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

#17

投稿記事 by kazu » 8年前

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

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

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

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

#18

投稿記事 by usao » 8年前

オフトピック
>コメントにしたらエラーはなくなりました。

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

kazu

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

#19

投稿記事 by kazu » 8年前

>>usaoさん

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

C6b14

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

#20

投稿記事 by C6b14 » 8年前

”「」はプロジェクトにあるはずです。”は間違いのはず。「building.png」はあり得ないのでbuilding.pngに変えて下さい。

kazu

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

#21

投稿記事 by kazu » 8年前

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

C6b14

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

#22

投稿記事 by C6b14 » 8年前

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

kazu

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

#23

投稿記事 by kazu » 8年前

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

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

hide

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

#24

投稿記事 by hide » 8年前

オフトピック
Dドライブなんぞを絶対アドレスに指定されたら100%動かない環境とか出てくるけどそれをそんな勧め方していいのかな

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

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

#25

投稿記事 by usao » 8年前

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

C6b14

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

#26

投稿記事 by C6b14 » 8年前

どちらもOpenCVで線分検出を行うプログラムです。質問者のかたからの投稿にある通りです。画像を見れば一目瞭然です。
>したいことは線分検出ですね。

C6b14

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

#27

投稿記事 by C6b14 » 8年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る