1

私は C++ が初めてで、オンラインで見つけたいくつかの OpenCV チュートリアルを実行しようとしています。Visual Studio 2013 で見つかったコードを正確に作成し、コードを適切に実行することができました。ただし、エラーが発生し続けます。

(アプリケーションをデバッグするには、[再試行] を押します) デバッグ エラー!

プログラム: ...rface_Basics\x64\Debug\OpenCV_Basics_CPP_Interface_Basics.exe

R6025 - 純粋仮想関数呼び出し

(アプリケーションをデバッグするには、[再試行] を押します)

私は純粋な仮想関数について読んでいましたが、このエラーが発生するには少なくとも仮想関数を宣言する必要があるように聞こえましたが、これはさらに混乱を招くだけです。以下は私のコードです:

#include <opencv2\opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

//main functions
void processImage();
void displayGraphics();

//images
Mat image;
Mat processedImage;

int main(int argc, char *argv[])
{
    //create a window
    namedWindow("Image");
    namedWindow("ProcessedImage");

    //load the image
    if (argc > 1)
        image = imread(argv[1]);
    else
        image = imread("lena.jpg");
    if (image.empty())
        exit(1);

    processImage();
    displayGraphics();

    waitKey(0);

    return 0;
}

void displayGraphics()
{
    //display both images
    imshow("Image", image);
    imshow("ProcessedImage", processedImage);
}

void processImage()
{
    int x, y;
    Vec3b pixel;
    unsigned char R, G, B;
    processedImage = image.clone();

    for (y = 0; y < processedImage.rows; y++)
    {
        for (x = 0; x < processedImage.cols; x++)
        {
            // Get the pixel at (x,y)
            pixel = processedImage.at<Vec3b>(y, x);
            // Get the separate colors
            B = pixel[0];
            G = pixel[1];
            R = pixel[2];
            // Assign the complement of each color
            pixel[0] = 255 - B;
            pixel[1] = 255 - G;
            pixel[2] = 255 - R;
            // Write the pixel back to the image
            processedImage.at<Vec3b>(y, x) = pixel;
        }
    }
}

メイン関数から引数を削除し、上記の引用で提供されているデバッグ プロセスを実行しようとしました。ただし、この crt0msg.c ファイルを呼び出すだけで、セクション #ifdef _DEBUG のケース 1 が強調表示されます。

この問題を解決するための助けをいただければ幸いです。

4

2 に答える 2

2

問題の原因となっている静的またはグローバルマットを使用しています。

私は問題を見つけました

>    MatAllocator* Mat::getStdAllocator() {
>    static StdMatAllocator allocator;//it's static. but mat's destructor need >it. so when that's have a static or global mat, can not be guaranteed this >allocator's destructor after that static or global mat.
>    return allocator;
>    }

ソース: http://code.opencv.org/issues/3355

これは OpenCV の未解決の欠陥です (まだ修正されていません)。開いている CV を最新バージョンに更新してみてください。欠陥レコードには、この問題の解決に役立つ可能性のある部分的な修正が記載されています。

于 2015-07-14T05:57:54.213 に答える
1
    Mat image;
    Mat processedImage;

そのグローバル宣言が問題です。電話

    image.release();
    processedImage.release(); 

の前に

    return 0;

概して。この問題は、最近の opencv3.0 に関連しているようです (アルファ版とベータ版の両方を使用しましたが、RC1 バージョンではそのようなエラーは発生しませんでした)。

于 2015-07-31T21:23:33.213 に答える