Anonymous
Невозможно пройти класс iplimage как аргумент
Сообщение
Anonymous » 24 авг 2025, 04:57
Я пытаюсь передать объект iplimage в другую программу в качестве аргумента с использованием системы системной библиотеки:
Код: Выделить всё
#include
#include
#include
#include "libuvc/libuvc.h"
#include
#include
#include
void cb(uvc_frame_t *frame, void *ptr) {
uvc_frame_t *bgr, *bgr2, *dup;
uvc_error_t ret, ret2;
IplImage* cvImg;
IplImage* cvImg2;
IplImage* im1,im2;
dup=frame;
// printf("callback! length = %d, ptr = %ld\n", frame->data_bytes, (int) ptr);
bgr = uvc_allocate_frame(frame->width * frame->height);
bgr2 = uvc_allocate_frame(frame->width * frame->height);
if (!bgr) {
printf("unable to allocate bgr frame!");
return;
}
if (!bgr2) {
printf("unable to allocate bgr2 frame!");
return;
}
ret = uvc_yuyv2y(frame,bgr);
if (ret) {
uvc_perror(ret, "uvc_yuyv2y");
uvc_free_frame(bgr);
return;
}
ret2 = uvc_yuyv2uv(dup,bgr2);
if (ret2) {
uvc_perror(ret, "uvc_yuyv2uv");
uvc_free_frame(bgr2);
return;
}
cvImg = cvCreateImageHeader(cvSize(bgr->width, bgr->height),IPL_DEPTH_8U,1);
cvSetData(cvImg, bgr->data, bgr->width);
cvImg2 = cvCreateImageHeader(cvSize(bgr2->width, bgr2->height),IPL_DEPTH_8U,1);
cvSetData(cvImg2, bgr2->data, bgr2->width);
cvEqualizeHist(cvImg,cvImg);
cvEqualizeHist(cvImg2,cvImg2);
// cvSaveImage("left.png",cvImg);
// cvSaveImage("right.png",cvImg2);
// cvShowImage("left", cvImg);
// cvShowImage("right", cvImg2);
// cvWaitKey(10);
int status=system("./../../exe cvImg cvImg2");
cvReleaseImageHeader(&cvImg);
cvReleaseImageHeader(&cvImg2);
uvc_free_frame(bgr);
uvc_free_frame(bgr2);
}
int main(int argc, char **argv) {
uvc_context_t *ctx;
uvc_error_t res;
uvc_device_t *dev;
uvc_device_handle_t *devh;
uvc_stream_ctrl_t ctrl;
res = uvc_init(&ctx, NULL);
if (res < 0) {
uvc_perror(res, "uvc_init");
return res;
}
puts("UVC initialized");
res = uvc_find_device(ctx, &dev, 0, 0, NULL);
if (res < 0) {
uvc_perror(res, "uvc_find_device");
} else {
puts("Device found");
res = uvc_open(dev, &devh);
if (res < 0) {
uvc_perror(res, "uvc_open");
} else {
puts("Device opened");
uvc_print_diag(devh, stderr);
res = uvc_get_stream_ctrl_format_size(
devh, &ctrl, UVC_FRAME_FORMAT_YUYV, 640, 480, 30
);
uvc_print_stream_ctrl(&ctrl, stderr);
if (res < 0) {
uvc_perror(res, "get_mode");
} else {
res = uvc_start_streaming(devh, &ctrl, cb, (void *)12345, 0);
if (res < 0) {
uvc_perror(res, "start_streaming");
} else {
puts("Streaming for 10 seconds...");
uvc_error_t resAEMODE = uvc_set_ae_mode(devh, 1);
uvc_perror(resAEMODE, "set_ae_mode");
int i;
for (i = 1; i
[code]#include "opencv2/core.hpp"
#include
#include
#include
#include
#include
#include
#include
#include
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat img1;
Mat img2;
Mat g1, g2,color;
Mat disp1, disp18,disp2,disp28,disparity,disparity1,falsemap;
Mat falseColorsMap, sfalseColorsMap;
//img1 = imread(argv[1],CV_8UC1);
//img2 = imread(argv[2],CV_8UC1);
img1 = cvarrToMat(argv[1]);
img2 = cvarrToMat(argv[2]);
imshow( "windowDisparity", disp18);
waitKey(1000);
return 0;
}
< /code>
Это бросает: < /p>
OpenCV Error: Bad argument (Unknown array type) in cvarrToMat, file /home/pi/opencv-3.3.0/modules/core/src/matrix.cpp, line 975
terminate called after throwing an instance of 'cv::Exception'
what(): /home/pi/opencv-3.3.0/modules/core/src/matrix.cpp:975: error: (-5) Unknown array type in function cvarrToMat
Как я могу это решить?
Подробнее здесь:
https://stackoverflow.com/questions/490 ... s-argument
1756000654
Anonymous
Я пытаюсь передать объект iplimage в другую программу в качестве аргумента с использованием системы системной библиотеки: [code]#include #include #include #include "libuvc/libuvc.h" #include #include #include void cb(uvc_frame_t *frame, void *ptr) { uvc_frame_t *bgr, *bgr2, *dup; uvc_error_t ret, ret2; IplImage* cvImg; IplImage* cvImg2; IplImage* im1,im2; dup=frame; // printf("callback! length = %d, ptr = %ld\n", frame->data_bytes, (int) ptr); bgr = uvc_allocate_frame(frame->width * frame->height); bgr2 = uvc_allocate_frame(frame->width * frame->height); if (!bgr) { printf("unable to allocate bgr frame!"); return; } if (!bgr2) { printf("unable to allocate bgr2 frame!"); return; } ret = uvc_yuyv2y(frame,bgr); if (ret) { uvc_perror(ret, "uvc_yuyv2y"); uvc_free_frame(bgr); return; } ret2 = uvc_yuyv2uv(dup,bgr2); if (ret2) { uvc_perror(ret, "uvc_yuyv2uv"); uvc_free_frame(bgr2); return; } cvImg = cvCreateImageHeader(cvSize(bgr->width, bgr->height),IPL_DEPTH_8U,1); cvSetData(cvImg, bgr->data, bgr->width); cvImg2 = cvCreateImageHeader(cvSize(bgr2->width, bgr2->height),IPL_DEPTH_8U,1); cvSetData(cvImg2, bgr2->data, bgr2->width); cvEqualizeHist(cvImg,cvImg); cvEqualizeHist(cvImg2,cvImg2); // cvSaveImage("left.png",cvImg); // cvSaveImage("right.png",cvImg2); // cvShowImage("left", cvImg); // cvShowImage("right", cvImg2); // cvWaitKey(10); int status=system("./../../exe cvImg cvImg2"); cvReleaseImageHeader(&cvImg); cvReleaseImageHeader(&cvImg2); uvc_free_frame(bgr); uvc_free_frame(bgr2); } int main(int argc, char **argv) { uvc_context_t *ctx; uvc_error_t res; uvc_device_t *dev; uvc_device_handle_t *devh; uvc_stream_ctrl_t ctrl; res = uvc_init(&ctx, NULL); if (res < 0) { uvc_perror(res, "uvc_init"); return res; } puts("UVC initialized"); res = uvc_find_device(ctx, &dev, 0, 0, NULL); if (res < 0) { uvc_perror(res, "uvc_find_device"); } else { puts("Device found"); res = uvc_open(dev, &devh); if (res < 0) { uvc_perror(res, "uvc_open"); } else { puts("Device opened"); uvc_print_diag(devh, stderr); res = uvc_get_stream_ctrl_format_size( devh, &ctrl, UVC_FRAME_FORMAT_YUYV, 640, 480, 30 ); uvc_print_stream_ctrl(&ctrl, stderr); if (res < 0) { uvc_perror(res, "get_mode"); } else { res = uvc_start_streaming(devh, &ctrl, cb, (void *)12345, 0); if (res < 0) { uvc_perror(res, "start_streaming"); } else { puts("Streaming for 10 seconds..."); uvc_error_t resAEMODE = uvc_set_ae_mode(devh, 1); uvc_perror(resAEMODE, "set_ae_mode"); int i; for (i = 1; i [code]#include "opencv2/core.hpp" #include #include #include #include #include #include #include #include using namespace cv; using namespace std; int main(int argc, char** argv) { Mat img1; Mat img2; Mat g1, g2,color; Mat disp1, disp18,disp2,disp28,disparity,disparity1,falsemap; Mat falseColorsMap, sfalseColorsMap; //img1 = imread(argv[1],CV_8UC1); //img2 = imread(argv[2],CV_8UC1); img1 = cvarrToMat(argv[1]); img2 = cvarrToMat(argv[2]); imshow( "windowDisparity", disp18); waitKey(1000); return 0; } < /code> Это бросает: < /p> OpenCV Error: Bad argument (Unknown array type) in cvarrToMat, file /home/pi/opencv-3.3.0/modules/core/src/matrix.cpp, line 975 terminate called after throwing an instance of 'cv::Exception' what(): /home/pi/opencv-3.3.0/modules/core/src/matrix.cpp:975: error: (-5) Unknown array type in function cvarrToMat [/code] Как я могу это решить? Подробнее здесь: [url]https://stackoverflow.com/questions/49083636/unable-to-pass-iplimage-class-as-argument[/url]