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