質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.06%

opencvのエラー解決法

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,838

yamata

score 36

opencvで局所特徴量を用いた処理を行おうとしているのですが、初めてのエラーがでました。

エラー内容は、
error LNK2019:未解決の外部シンボル_mainが関数_tmainCRTStartupで参照されました。
以上になります。

今回初めて追加したモジュールは、nonfreeだけです。

初めてのエラーのためわかりません。
解決方法よろしくお願いします。

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <opencv2\opencv.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <sstream>
#include <iomanip>
#include <opencv2/nonfree/nonfree.hpp> // SIFT・SURFモジュール用

#ifdef _DEBUG
    //Debugモードの場合
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_core249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_imgproc249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_highgui249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_objdetect249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_contrib249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_features2d249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_flann249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_gpu249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_legacy249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_ts249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_video249d.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_nonfree249d.lib")

#else
    //Releaseモードの場合
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_core249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_imgproc249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_highgui249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_objdetect249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_contrib249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_features2d249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_flann249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_gpu249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_legacy249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_ts249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_video249.lib")
    #pragma comment(lib,"C:\\dev\\opencv-2.4.9\\build\\x86\\vc10\\lib\\opencv_nonfree249.lib")

#endif


void FeatureMatching(
    const std::string& filename1,            // 画像1のファイル名
    const std::string& filename2,            // 画像2のファイル名
    const std::string& featureDetectorName,        // detectorType
    const std::string& descriptorExtractorName,    // descriptorExtractorType
    const std::string& descriptorMatcherName,    // descriptorMatcherType
    bool crossCheck = true)                // マッチング結果をクロスチェックするかどうか

{
    // 画像の読み込み
    cv::Mat img1 = cv::imread("temp_up.png");
    cv::Mat img2 = cv::imread("C:\\opencv_ICImage\\2016-11-1黒ネジ10本30fps\\結果\\result_0092.bmp");

    // SIFT・SURFモジュールの初期化
    cv::initModule_nonfree();

    // 特徴点抽出
    cv::Ptr<cv::FeatureDetector> detector = cv::FeatureDetector::create(featureDetectorName);
    std::vector<cv::KeyPoint> keypoint1, keypoint2;
    detector->detect(img1, keypoint1);
    detector->detect(img2, keypoint2);

    // 特徴記述
    cv::Ptr<cv::DescriptorExtractor> extractor = cv::DescriptorExtractor::create(descriptorExtractorName);
    cv::Mat descriptor1, descriptor2;
    extractor->compute(img1, keypoint1, descriptor1);
    extractor->compute(img2, keypoint2, descriptor2);

    // マッチング
    cv::Ptr<cv::DescriptorMatcher> matcher = cv::DescriptorMatcher::create(descriptorMatcherName);
    std::vector<cv::DMatch> dmatch;
    if (crossCheck)
    {
        // クロスチェックする場合
        std::vector<cv::DMatch> match12, match21;
        matcher->match(descriptor1, descriptor2, match12);
        matcher->match(descriptor2, descriptor1, match21);
        for (size_t i = 0; i < match12.size(); i++)
        {
            cv::DMatch forward = match12[i];
            cv::DMatch backward = match21[forward.trainIdx];
            if (backward.trainIdx == forward.queryIdx)
                dmatch.push_back(forward);
        }
    }
    else
    {
        // クロスチェックしない場合
        matcher->match(descriptor1, descriptor2, dmatch);
    }

    // マッチング結果の表示
    cv::Mat out;
    cv::drawMatches(img1, keypoint1, img2, keypoint2, dmatch, out);
    cv::imshow("matching", out);
    while (cv::waitKey(1) == -1);
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

こんにちは。

そのエラーはmain()関数が定義されていないと言うエラーです。
コンソール・アプリの場合、プロジェクトの中でmain()関数を定義する必要があります。
ご提示されたソースには、main()関数がないようです。定義しましょう。
もしくは、もし、他のソースにmain()関数を入れているのでしたら、そのソースをプロジェクトに含めているか確認下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/16 13:09

    確かに、main関数を定義していないです。
    http://whoopsidaisies.hatenablog.com/entry/2013/12/07/135810
    こちらのページでも定義していないのですが、、、

    キャンセル

  • 2016/11/16 13:30

    "定義してない"じゃない。
    省略してるだけだ。

    キャンセル

  • 2016/11/16 13:34

    そのページを見ましたが「このようにして使えばよいですよ」というサンプルで、main()は自分で作って下さいとの立場で書かれているようです。
    それに必要な情報が十分に提供されているので、なかなか親切なページと感じます。

    この辺は臨機応変さが必要になります。頑張って下さい。

    キャンセル

  • 2016/11/16 13:41

    親切にありがとうございます。やってみたいと思います。

    キャンセル

-1

エラーメッセージから恐らく新規プロジェクト作成の際に、プロジェクトが’Win32 コマンドプロンプト'ではないものを選択したのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/16 13:34

    では’他のファイル’も’main'無い?どこからプログラムを開始するの?

    キャンセル

  • 2016/11/16 13:37

    int main を void FeatureMatching に置き換えちゃった(ためにmainが消えた)んじゃネーノ?

    キャンセル

  • 2016/11/16 16:57

    本来は’main()'から’void FeatureMatching(
    const std::string& filename1, // 画像1のファイル名
    const std::string& filename2, // 画像2のファイル名
    const std::string& featureDetectorName, // detectorType
    const std::string& descriptorExtractorName, // descriptorExtractorType
    const std::string& descriptorMatcherName, // descriptorMatcherType
    bool crossCheck = true) // マッチング結果をクロスチェックするかどうか

    ’への引数を設定して呼ぶのでは?これらの引数が無ければ動かないとおもいますが。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る