c++ - OPENCV:image_proc 中的 PCA 应用程序错误

标签 c++ visual-c++ opencv

基础从这里here .

我得到了这个错误,这是我近 3 天的调试错误中唯一剩下的一个错误:

Unhandled exception at 0x000007FEEC6315A4 (opencv_imgproc242.dll) in PCA.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

请有人可以帮助我解决这个问题。我目前使用的是VS2012,操作系统是win7 64位。我按照此配置我的 opencv 2.4.2 blog .

请帮忙!

最佳答案

我已经纠正了一些小错误(现在它对我来说非常适合):

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

using namespace cv;
using namespace std;

double getOrientation(vector<Point> &pts, Mat &img)
{
    if (pts.size() == 0) return false;

    //Construct a buffer used by the pca analysis
    Mat data_pts = Mat(pts.size(), 2, CV_64FC1);
    for (int i = 0; i < data_pts.rows; ++i)
    {
        data_pts.at<double>(i, 0) = pts[i].x;
        data_pts.at<double>(i, 1) = pts[i].y;
    }


    //Perform PCA analysis
    PCA pca_analysis(data_pts, Mat(), CV_PCA_DATA_AS_ROW);

    //Store the position of the object
    Point pos = Point(pca_analysis.mean.at<double>(0, 0),
                      pca_analysis.mean.at<double>(0, 1));

    //Store the eigenvalues and eigenvectors
    vector<Point2d> eigen_vecs(2);
    vector<double> eigen_val(2);
    for (int i = 0; i < 2; ++i)
    {
        eigen_vecs[i] = Point2d(pca_analysis.eigenvectors.at<double>(i, 0),
                                pca_analysis.eigenvectors.at<double>(i, 1));

        eigen_val[i] = pca_analysis.eigenvalues.at<double>(i);
    }

    // Draw the principal components
    circle(img, pos, 3, CV_RGB(255, 0, 255), 2);
    line(img, pos, pos + 0.02 * Point(eigen_vecs[0].x * eigen_val[0], eigen_vecs[0].y * eigen_val[0]) , CV_RGB(255, 255, 0));
    line(img, pos, pos + 0.02 * Point(eigen_vecs[1].x * eigen_val[1], eigen_vecs[1].y * eigen_val[1]) , CV_RGB(0, 255, 255));

    return atan2(eigen_vecs[0].y, eigen_vecs[0].x);
}
int main()
{
    // Read the image
    Mat bw, img = imread("pca_test1.jpg",1); // "pca_test2.jpg"

    // Convert it to greyscale
    cvtColor(img, bw, COLOR_BGR2GRAY);

    // Apply thresholding
    threshold(bw, bw, 150, 255, cv::THRESH_BINARY);

    // Find all objects of interest
    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;
    findContours(bw, contours, hierarchy, cv::RETR_LIST, cv::CHAIN_APPROX_NONE);

    // For each object
    for (size_t i = 0; i < contours.size(); ++i)
    {
        // Calculate its area
        double area = contourArea(contours[i]);

        // Ignore if too small or too large
        if (area < 1e2 || 1e5 < area) continue;

        // Draw the contour
        drawContours(img, contours, i, CV_RGB(255, 0, 0), 2, 8, hierarchy, 0);

        // Get the object orientation
        getOrientation(contours[i], img);
    }

    imshow("Image", img);
    char key;
    while (true)
    {
        key = waitKey(1);

        if (key == 'q') break;
    }
    cv::destroyAllWindows();
    return 0;
}

关于c++ - OPENCV:image_proc 中的 PCA 应用程序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21731368/

相关文章:

c++ - 图像 C++ 上有太多黑色区域的 OpenCV 校正

c - asm ("nop") 在 Windows 中的实现

c++ - 如何判断va_list是否为空

c++ - opencv 窗口在鼠标回调时不刷新

python - 计算 OpenCV 中一条线上的白色像素数

python-2.7 - 属性错误 : 'NoneType' object has no attribute 'tostring'

php - 如何从我的扩展中将对象返回到 PHP 用户空间?

c++ - 来自 C++ 的 QStandardItemModel 在 QtQuick/QML TableView 中不可见

c++ - fstream 不解析路径

visual-c++ - 在Windows 7命令行中使用OpenCV 2.4编译应用