OpenCV のコンパイル問題の解決: OpenCV のコンパイルが成功した後、テスト コードを実行できません

エラーの問題は次のとおりです。

严重性	代码	说明	项目	文件	行	禁止显示状态
错误	LNK2001	无法解析的外部符号 "void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class cv::_InputArray const &)" (?imshow@cv@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV_InputArray@1@@Z)	demo_opencv48	D:\myopencv-cpu\my_cv\test_opencv48\demo_opencv48\main.obj	1	
错误	LNK2001	无法解析的外部符号 "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ)	demo_opencv48	D:\myopencv-cpu\my_cv\test_opencv48\demo_opencv48\main.obj	1	
错误	LNK2001	无法解析的外部符号 "public: __thiscall cv::Mat::Mat(int,int,int,class cv::Scalar_<double> const &)" (??0Mat@cv@@QAE@HHHABV?$Scalar_@N@1@@Z)	demo_opencv48	D:\myopencv-cpu\my_cv\test_opencv48\demo_opencv48\main.obj	1	
错误	LNK2001	无法解析的外部符号 "void __cdecl cv::line(class cv::_InputOutputArray const &,class cv::Point_<int>,class cv::Point_<int>,class cv::Scalar_<double> const &,int,int,int)" (?line@cv@@YAXABV_InputOutputArray@1@V?$Point_@H@1@1ABV?$Scalar_@N@1@HHH@Z)	demo_opencv48	D:\myopencv-cpu\my_cv\test_opencv48\demo_opencv48\main.obj	1	
错误	LNK2001	无法解析的外部符号 "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z)	demo_opencv48	D:\myopencv-cpu\my_cv\test_opencv48\demo_opencv48\main.obj	1	
错误	LNK1120	5 个无法解析的外部命令	demo_opencv48	D:\myopencv-cpu\my_cv\test_opencv48\demo_opencv48\Release\demo_opencv48.exe	1	

解決策: (OpenCV システム環境がパスに正常に書き込まれていることを確認してください)

これらのエラーは、プロジェクトが OpenCV ライブラリに正しくリンクされていないことを示します。これらの問題を解決するには、プロジェクトで OpenCV のインクルード ディレクトリ、ライブラリ ディレクトリ、およびリンク ライブラリが正しく構成されていることを確認する必要があります。考えられる手順は次のとおりです。

OpenCV のインストール パスを確認する: OpenCV ライブラリがインストールされていることを確認し、そのインストール パスを見つけます。

インクルード ディレクトリを設定する: OpenCV ライブラリのインクルード ディレクトリをプロジェクトに追加します。これにより、コンパイラが OpenCV ヘッダー ファイルを見つけられるようになります。プロジェクト設定に次のようなディレクトリを追加します。

C:\path\to\opencv\include

ライブラリ ディレクトリの設定: OpenCV ライブラリのライブラリ ディレクトリを追加します。これにより、リンカーは OpenCV のリンクされたライブラリを探す場所を知ることができます。プロジェクト設定に次のようなディレクトリを追加します。

C:\path\to\opencv\lib

リンク ライブラリの追加: 必要な OpenCV リンク ライブラリをプロジェクト設定に追加します。OpenCV 4 の場合、opencv_world という名前のリンク ライブラリを追加できます。リンカー設定に次のようなリンク ライブラリを必ず追加してください。

opencv_world{
    
    version number}.lib

{バージョン番号} を、インストールされている OpenCV バージョンの実際のバージョン番号に置き換えてください。

再コンパイル: 上記の手順を完了した後、コンパイラーが OpenCV ライブラリを正しく検索してリンクできるように、プロジェクトを再コンパイルします。

テストコード:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <cmath>

int main() {
    
    
    // Create a black image
    cv::Mat image(400, 800, CV_8UC3, cv::Scalar(0, 0, 0));

    // Create the x-axis values
    std::vector<double> x_values;
    for (int x = 0; x < image.cols; x++) {
    
    
        double value = static_cast<double>(x) / image.cols * 4 * CV_PI;  // Range: 0 to 4*pi
        x_values.push_back(value);
    }

    // Calculate the corresponding y-axis values (sin function)
    std::vector<double> y_values;
    for (double x : x_values) {
    
    
        double y = 200 * (1 - std::sin(x));
        y_values.push_back(y);
    }

    // Draw the curve
    for (size_t i = 1; i < x_values.size(); i++) {
    
    
        cv::Point pt1(static_cast<int>(x_values[i - 1] / (4 * CV_PI) * image.cols), static_cast<int>(y_values[i - 1]));
        cv::Point pt2(static_cast<int>(x_values[i] / (4 * CV_PI) * image.cols), static_cast<int>(y_values[i]));
        cv::line(image, pt1, pt2, cv::Scalar(0, 0, 255), 2);
    }

    // Show the image with the curve
    cv::imshow("Sin Curve", image);
    cv::waitKey(0);

    return 0;
}

結果:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_41194129/article/details/132288856