OPENCV: PCA application error in image_proc

匿名 (未验证) 提交于 2019-12-03 01:12:01

问题:

Base from this here.

I got this error and this is the only one left for almost 3 days of my trial and error in debugging:

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

Please can someone here who can help me with this. Im currently using VS2012 and my os is win7 64-bit. I configure my opencv 2.4.2 following this blog.

Please help!

回答1:

I've corrected some minor bugs (and now it works perfect for me):

#include  #include   using namespace cv; using namespace std;  double getOrientation(vector &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 (i, 0) = pts[i].x;         data_pts.at(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(0, 0),                       pca_analysis.mean.at(0, 1));      //Store the eigenvalues and eigenvectors     vector eigen_vecs(2);     vector eigen_val(2);     for (int i = 0; i (i, 0),                                 pca_analysis.eigenvectors.at(i, 1));          eigen_val[i] = pca_analysis.eigenvalues.at(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 > contours;     vector hierarchy;     findContours(bw, contours, hierarchy, cv::RETR_LIST, cv::CHAIN_APPROX_NONE);      // For each object     for (size_t i = 0; i 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!