question

Harper-7125 avatar image
0 Votes"
Harper-7125 asked GuidoFranzke answered

Visual Studio 2019 error Unhandled exception at 0x00007FFC5A1F4ED9 in Project2.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000446D2FCF60.

Hello everyone, I have created a program using opencv and c++ that mimics planets rotating around the sun. I started by using a blank image and some dots, but I am trying to replace them with actual images. When I simply try to make the background a picture of space, however, I keep getting an exception unhandled error. When I try to simply just display the image in it's own program it works, but not for this one. Could anyone help me troubleshoot this? The code is below.
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>

 using namespace std;
 using namespace cv;
    
 Mat img;
 double theta = 0.0;
 double theta2 = 0.0;
 int radius = 150;
 int radius2 = 50;
 bool play_mode = false;
    
 int main(int argc, const char* argv[])
 {
    
     Mat universe = imread("universe_space.png");
    
     Point Q = Point(400, 250); //The rotation about point (red color)
     Point P = Point(Q.x + radius, Q.y); //The target point (green color)
    
     //Create another point P2, which will rotate about P
     Point P2;  //Let p2 rotate about P in counter-clock-wise; initially you can let P2 line up with P horizontally 
                //You can just theta as the reference 
     P2 = Point(P.x + radius2, P.y);
    
    
    
     double pi = 3.14159265359;
    
    
     //Create a matrix version for point P
     double P_mat_data[3] = { P.x, P.y, 1 };
     Mat P_mat = Mat(3, 1, CV_64FC1, P_mat_data); //The matrix version for point P
    
     //Create a matrix version for point P2
     double P2_mat_data[3] = { P2.x, P2.y, 1 };
     Mat P2_mat = Mat(3, 1, CV_64FC1, P2_mat_data);
    
    
     while (true)
     {
         //Refresh the image
         img = cv::Scalar(255, 255, 255);
    
         if (play_mode)
         {
             theta += 1;
             theta2 += 5;
         }
    
         double radian = theta * (pi / 180); //convert Degree to Radian (only for window user)
         double radian2 = theta2 * (pi / 180); //convert Degree to Radian (only for window user)
    
    
         /* Earth around sun: The code below is to generate the 2 matrices for the 3 steps for Q-about rotation */
         double T1_data[3][3] = { { 1, 0, -Q.x }, { 0, 1, -Q.y }, { 0, 0, 1 } };
         double T2_data[3][3] = { { 1, 0, Q.x }, { 0, 1, Q.y }, { 0, 0, 1 } };
    
         Mat T1 = Mat(3, 3, CV_64FC1, T1_data);  //First translation matrix  -- Step 1
         Mat T2 = Mat(3, 3, CV_64FC1, T2_data); //Second translation matrix  -- Step 3
    
    
         //Update Earth Pos
         double R_data[3][3] = { { cos(radian), -sin(radian), 0 }, { sin(radian), cos(radian), 0 }, { 0, 0, 1 } };
    
         Mat R = Mat(3, 3, CV_64FC1, R_data);  //Rotation matrix -- Step 2
         Mat M = T2 * R * T1;  //The arbitrary point rotation
    
         Mat P_mat_new = M * P_mat;
         P.x = P_mat_new.ptr<double>(0)[0];
         P.y = P_mat_new.ptr<double>(1)[0];
    
    
    
    
         /* Moon around earth: The code below is to generate the 2 matrices for the 3 steps for P-about rotation */
         double t1_data[3][3] = { { 1, 0, -P.x }, { 0, 1, -P.y }, { 0, 0, 1 } };
         double t2_data[3][3] = { { 1, 0, P.x }, { 0, 1, P.y }, { 0, 0, 1 } };
    
    
         Mat t1 = Mat(3, 3, CV_64FC1, t1_data);  //First translation matrix  -- Step 1
         Mat t2 = Mat(3, 3, CV_64FC1, t2_data); //Second translation matrix  -- Step 3
    
         //Update Moon Pos
         double r_data[3][3] = { { cos(radian2), -sin(radian2), 0 }, { sin(radian2), cos(radian2), 0 }, { 0, 0, 1 } };
    
         Mat r = Mat(3, 3, CV_64FC1, r_data);  //Rotation matrix -- Step 2
         Mat m = t2 * r * t1;  //The arbitrary point rotation
    
         Mat P2_mat_new = m * M * P2_mat;
         P2.x = P2_mat_new.ptr<double>(0)[0];
         P2.y = P2_mat_new.ptr<double>(1)[0];
    
    
         /* Create the Rotatiom matrix for P-rotation */
         //double r_data[3][3];  //implement this part 
         //Mat r = Mat(3, 3, CV_64FC1, r_data);  //Rotation matrix -- Step 2
         //Mat m = t2 * r * t1;  //The arbitrary point rotation
    
    
         //Draw the new position
         circle(img, P, 1, Scalar(0, 155, 0), 12);
         circle(img, Q, 1, Scalar(0, 0, 255), 5);
         circle(img, P2, 1, Scalar(255, 0, 0), 7);
    
    
         imshow("Universe", universe);
         char c = waitKey(1);
         if (c == 27)
             break;
    
         else if (c == 'p' || c == 'P')
         {
             if (play_mode)
                 play_mode = false;
             else
                 play_mode = true;
         }
    
         //Key board to change the rotation radius:  "i" - increase the radius    "d" - decrease the radius
         else if (c == 'i' || c == 'I')
         {
             //increase the radius
             // radius++; //increase by 1 pixel, which is so hard to see the difference
             radius += 5;
             P.x = Q.x + radius;
             P2.x = P.x + radius2;
             P_mat_data[0] = P.x;
    
         }
         else if (c == 'd' || c == 'D')
         {
             //decrease the radius
             if (radius > 5)
                 radius -= 5;
    
             P.x = Q.x + radius;
             P2.x = P.x + radius2;
             P_mat_data[0] = P.x;
         }
    
    
     }
    
    
     return 1;
 }
c++
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

1 Answer

GuidoFranzke avatar image
0 Votes"
GuidoFranzke answered

Hello,
for opencv you should better ask here: forum.opencv.org
Regards, Guido

5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.