Ask Your Question
0

Problem with IPL image and imshow

asked May 11 '15

spinter696 gravatar image

updated May 11 '15

Hi I want to show an IPL image created but with imshow I am having problems, I was searching how to solve that error but I didn't find anything.... so if someone could help me I would be very please. I am in a raspberry pi, using opencv 3.0.0 I know is better use Mat know but I didnt know hot to convert an Image captured by other API to a Mat object and not and IPL

#include <uEye.h>
#include <ueye_deprecated.h>
#include <wchar.h>
#include <locale.h>
#include <stdlib.h>
#include <stdio.h>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
rest of code

if(is_FreezeVideo(hCam, IS_WAIT) == IS_SUCCESS){
        void *pMemVoid; //pointer to where the image is stored
        is_GetImageMem (hCam, &pMemVoid);
        IplImage * img;
        img=cvCreateImage(cvSize(img_width, img_height), IPL_DEPTH_8U, 3); 
        img->nSize=112;
        img->ID=0;
        img->nChannels=3;
        img->alphaChannel=0;
        img->depth=8;
        img->dataOrder=0;
        img->origin=0;
        img->align=4;
        img->width=img_width;
        img->height=img_height;
        img->roi=NULL;
        img->maskROI=NULL;
        img->imageId=NULL;
        img->tileInfo=NULL;
        img->imageSize=3*img_width*img_height;
        img->imageData=(char*)pMemVoid;  //the pointer to imagaData
        img->widthStep=3*img_width;
        img->imageDataOrigin=(char*)pMemVoid; //and again
        //now you can use your img just like a normal OpenCV image
        namedWindow( "A", 1 );
        cv::imshow("A",img);
        waitKey(0);
   }
  rest of code
}

Error is the next:

$ g++ -Wall -I/usr/lib -o main main.cpp -lueye_api
main.cpp: In function 'int main(int, char**)':
main.cpp:100:31: error: no matching function for call to 'imshow(const char [2], IplImage*&)'
main.cpp:100:31: note: candidates are:
/usr/local/include/opencv2/highgui.hpp:305:19: note: void cv::imshow(const cv::String&, cv::InputArray)
/usr/local/include/opencv2/highgui.hpp:305:19: note:   no known conversion for argument 2 from        'IplImage* {aka _IplImage*}' to 'cv::InputArray {aka const cv::_InputArray&}'
/usr/local/include/opencv2/highgui.hpp:488:17: note: void cv::imshow(const cv::String&, const     cv::ogl::Texture2D&)
/usr/local/include/opencv2/highgui.hpp:488:17: note:   no known conversion for argument 2 from 'IplImage* {aka _IplImage*}' to 'const cv::ogl::Texture2D&'
Preview: (hide)

2 answers

Sort by » oldest newest most voted
2

answered May 11 '15

berak gravatar image

updated May 11 '15

please avoid using IplImage* , or , anything from opencv's arcane c-api.

instead, stick to using cv::Mat consistently.

(wherever you found that code, it's horribly outdated)

i think, you want this instead:

    void *pMemVoid; //pointer to where the image is stored
    is_GetImageMem (hCam, &pMemVoid);

    cv::Mat image(height, width, CV_8UC3, (uchar*)pMemVoid);
    cv::imshow("lalala", image);

also, since you mention opencv3.0, please:

#include <opencv2/opencv.hpp>
Preview: (hide)
0

answered May 11 '15

spinter696 gravatar image

updated May 11 '15

I tryed that befores posting butI obtain the next error: /tmp/ccxslput.o: In the function main': main.cpp:(.text+0x354): reference tocv::namedWindow(cv::String const&, int)' without definition main.cpp:(.text+0x398): reference to cv::imshow(cv::String const&, cv::_InputArray const&)' without definition main.cpp:(.text+0x3b8): reference tocv::waitKey(int)' without definition /tmp/ccxslput.o: In the function cv::String::String(char const*)': main.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x4c): reference tocv::String::allocate(unsigned int)' without definition /tmp/ccxslput.o: In the functioncv::String::~String()': main.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): reference tocv::String::deallocate()' without definition /tmp/ccxslput.o: En la función `cv::Mat::Mat(int, int, int, void*, unsigned int)

Preview: (hide)

Comments

you're not linking any of the required opencv libs

$ g++ -Wall -I/usr/lib -o main main.cpp -lueye_api -lopencv_core -lopencv_imgproc -lopencv_highgui

berak gravatar imageberak (May 11 '15)edit

Linking in that way libraries give me the same error

spinter696 gravatar imagespinter696 (May 11 '15)edit

try to find out, where the libs are , and add a -L/path/to/opencv/libs

(g++ unfortunately does not complain about non-found libs)

berak gravatar imageberak (May 11 '15)edit

I have libs under /usr/lib g++ -Wall -I/usr/lib -o main main.cpp -L/usr/lib -lueye_api -lopencv_core -lopencv_imgproc -lopencv_highgui

that will be the correct one???

spinter696 gravatar imagespinter696 (May 11 '15)edit

idk, where your opencv libs are.

berak gravatar imageberak (May 11 '15)edit

Question Tools

1 follower

Stats

Asked: May 11 '15

Seen: 2,845 times

Last updated: May 11 '15