如何解码从c++;将套接字连接到android并将其显示到imageview? 我现在可以用OpenCV和C++在一个插座连接上发送一个垫子框架。我想解码该帧并将其显示在android设备上。目前,我可以从android中的套接字接收mat数据,但当我尝试将图像转换为位图并显示为ImageView时,会引发异常。我认为问题在于存储图像的缓冲区,我认为它不够大,无法存储图像,因此转换失败,因为数据不完整

如何解码从c++;将套接字连接到android并将其显示到imageview? 我现在可以用OpenCV和C++在一个插座连接上发送一个垫子框架。我想解码该帧并将其显示在android设备上。目前,我可以从android中的套接字接收mat数据,但当我尝试将图像转换为位图并显示为ImageView时,会引发异常。我认为问题在于存储图像的缓冲区,我认为它不够大,无法存储图像,因此转换失败,因为数据不完整,android,c++,sockets,opencv,Android,C++,Sockets,Opencv,CameraStream.cpp void CameraStream::startStream(){ /*************Socket Setup***********/ int sockfd, newsockfd, clilen; struct sockaddr_in serv_addr, cli_addr; int n; //Create a socket sockfd = socket(AF_INET, SOCK_STREA

CameraStream.cpp

void CameraStream::startStream(){
    /*************Socket Setup***********/
        int sockfd, newsockfd, clilen;
    struct sockaddr_in serv_addr, cli_addr;
    int n;

    //Create a socket
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    //If the return is less than 0, then the socket failed to create
    if (sockfd < 0)
    {
        cout << "ERROR opening socket" << endl;
    }
    //Initialize the buffer to all zeros
    memset((void*) &serv_addr, 0, sizeof(serv_addr));
    //Setup the server address structure
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(9000);
    //Bind the socket appropriately
    if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
    {
        cout << "ERROR on binding" << endl;
    }
    //Listen on the socket for an incoming connection
    listen(sockfd,5);
    clilen = sizeof(cli_addr);
    //Block until a client has connected to the server
    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, (socklen_t*) &clilen);
    //If the return is less than 0l, there is an error
    if (newsockfd < 0)
    {
        cout << "ERROR on accept" << endl;
        running = false;
    }
        /************************************/
    raspicam::RaspiCam_Cv Camera;
    cv::Mat image;
    Camera.set(CV_CAP_PROP_FRAME_WIDTH,320);   // width pixels
    Camera.set(CV_CAP_PROP_FRAME_HEIGHT,240);   // height pixels
    Camera.set(CV_CAP_PROP_GAIN, 0);            // Enable auto gain etc.
    Camera.set( CV_CAP_PROP_FORMAT, CV_8UC1 );
    if (!Camera.open()) {
        cout<<"Error opening the camera"<<endl;
        running = false;
    }
    while(running){
        Camera.grab();
        Camera.retrieve(image);
        image = (image.reshape(0,1));
        int imgSize =  image.total()*image.elemSize();
        //capture->retrieve(frame,0);
        //Send_All(sockfd,frame.data,imgSize);
        n = write(newsockfd,image.data,imgSize);
        if(n<0){
            cout<<"error writing to socket\n";
            running = false;
        }
    }
    close(sockfd);
    Camera.release();
}
抛出的异常

05-28 13:17:11.280 24057-24559/com.tidy_neutron E/cv::error(): OpenCV Error: Assertion failed (src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols) in void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean), file /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp, line 97
05-28 13:17:11.280 24057-24559/com.tidy_neutron E/org.opencv.android.Utils: nMatToBitmap catched cv::Exception: /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean)
05-28 13:17:11.281 24057-24559/com.tidy_neutron E/AndroidRuntime: FATAL EXCEPTION: Thread-8374
                                                                  Process: com.tidy_neutron, PID: 24057
                                                                  CvException [org.opencv.core.CvException: /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean)
                                                                  ]
                                                                      at org.opencv.android.Utils.nMatToBitmap2(Native Method)
                                                                      at org.opencv.android.Utils.matToBitmap(Utils.java:123)
                                                                      at org.opencv.android.Utils.matToBitmap(Utils.java:132)
                                                                      at com.tidy_neutron.RaspBotConnector$1.run(RaspBotConnector.java:106)
                                                                      at java.lang.Thread.run(Thread.java:818)
05-28 13:17:11.280 24057-24559/com.tidy_neutron E/cv::error(): OpenCV Error: Assertion failed (src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols) in void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean), file /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp, line 97
05-28 13:17:11.280 24057-24559/com.tidy_neutron E/org.opencv.android.Utils: nMatToBitmap catched cv::Exception: /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean)
05-28 13:17:11.281 24057-24559/com.tidy_neutron E/AndroidRuntime: FATAL EXCEPTION: Thread-8374
                                                                  Process: com.tidy_neutron, PID: 24057
                                                                  CvException [org.opencv.core.CvException: /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean)
                                                                  ]
                                                                      at org.opencv.android.Utils.nMatToBitmap2(Native Method)
                                                                      at org.opencv.android.Utils.matToBitmap(Utils.java:123)
                                                                      at org.opencv.android.Utils.matToBitmap(Utils.java:132)
                                                                      at com.tidy_neutron.RaspBotConnector$1.run(RaspBotConnector.java:106)
                                                                      at java.lang.Thread.run(Thread.java:818)