首页 > 解决方案 > 如何创建对象数组并访问子类中的函数?C++

问题描述

为了同时捕获图像,我想创建一个对象数组 ( cam)。使用当前数组,我可以执行 the 的功能,class xiAPIplus_Cameraclass xiAPIplusCameraOcv : public xiAPIplus_Camera不会启动其中的功能。例如:如果我启动cv::Mat GetNextImageOcvMat();类析构函数,则改为运行。

class xiAPIplusCameraOcv : public xiAPIplus_Camera
{
public:
    /**
    * Initialize the xiAPIplusCameraOcv class.
    */  
    xiAPIplusCameraOcv();
    /**
    * Class destructor. Free allocated memory, release images
    */
    virtual ~xiAPIplusCameraOcv();
    /**
    * Reads an image from the camera using XiAPI, stores the image in OpenCV Mat format.
    * @return OpenCV Mat image. 
    */
    cv::Mat         GetNextImageOcvMat(); //Reads an image and converts it to OpenCV Mat
    /**
    * Converts a XiAPI image (xiAPIplus_Image*) to OpenCV Mat.
    * @param input_image[in] Input xiAPIplus_Image* to be converted.
    * @return converted OpenCV IpliImage* image. 
    */
    cv::Mat         ConvertOcvMat(xiAPIplus_Image * input_image); //Converts an image to OpenCV Mat
    //virtual xiAPIplusCameraOcv& operator >> (CV_OUT Mat& input_image);
    
    private:
    
    /**
    * Resets the Opencv image if properties of XI_IMG have changed. Resets the cv_mat_image_.
    */
    void resetCvImage_();               //Resets the OpenCV image properties if XI_IMG format has changed
    cv::Mat                 cv_mat_image_;
    xiAPIplus_Image *   next_image_;      
    int                 timeout_;
    int             counter_;
    int             index_;
};

主要功能能够创建数组,但我在使用它时遗漏了一些东西。

int main(int argc, char* argv[])
{
    try
    {
        xiAPIplusCameraOcv cam[5];
        int n = cam[4].GetNumberOfConnectedCameras();
        
        int uidArray[4];
        char* snArray[4];
        
        for (int id = 0; id < n; id++)
        {
            printf("Opening %d. camera ...\n", id + 1);
            cam[id].OpenByID(id);
            cam[id].GetSerialNumber(sn, 100);
            
        }
        for (int exp = 0; exp < n; exp++)
        {
            cam[exp].StartAcquisition();
            
            Mat cv_mat_image = cam[exp].GetNextImageOcvMat(); //
            printf("GetNextImageOcvMat\n");

            cv::imwrite(save_at, cv_mat_image);// , compression_params);

            cam[exp].StopAcquisition();
        }

        printf("Done\n");

        cv::waitKey(500);
    }
    catch (xiAPIplus_Exception& exp)
    {
        printf("Error:\n");
        exp.PrintError();
#ifdef WIN32
        Sleep(2000);
#endif
        cv::waitKey(2000);
        return -1;
    }
    return 0;
}

在此行之后 Mat cv_mat_image = cam[exp].GetNextImageOcvMat();,析构函数正在关闭我的相机对象。

/**
* Class destructor. Free allocated memory, release images
*/
xiAPIplusCameraOcv::~xiAPIplusCameraOcv(){
    printf("Closing xiAPIplus_Ocv camera\n");
    cv_mat_image_.release();
}

标签: c++class

解决方案


推荐阅读