Navigation

    VisionAppster.com

    VisionAppster Forum

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    read images from a file in C API tool

    Tools
    3
    5
    935
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      luqt123 last edited by

      Hello dear Sir,

      I'm new user with software and I wanted to make my own tool that could read images from my file system. Is there a way that can be done?
      I tried to use OpenCV imread function:
      kuvio_string src = "_DSC4969.JPG";
      cv::Mat mat = cv::imread(src, 0);
      But I'm assuming that OpenCvMat function it wraps kuvio images and matrices to OpenCV data type, but not otherway around, so in the above case even though it compiles, but I can not convert it to kuvio image data type. Maybe there is similar function to OpenCV imread() that could read directly to kuvio image data types.
      Very best regards

      1 Reply Last reply Reply Quote 0
      • Topi
        Topi last edited by

        Hi,
        The easiest way to read images from files is to set up a virtual camera in the Virtual Camera ribbon of the Builder. You can select the images there. Then, pick your virtual camera from the drop-down list of the Camera Id input parameter of an Image Source tool.

        All images passed between tools must be allocated by the platform. Therefore, you cannot directly return an image that is allocated by an OpenCV function. Otherwise the platform wouldn't be able to correctly deallocate it when it is no longer needed.

        What you can do is to allocate a new output image using for example kuvio_image_alloc_copy and then copying the data from the image allocated by an OpenCV function call. If you place that image to the out struct of your custom tool implementation, you get the picture out.

        L 1 Reply Last reply Reply Quote 2
        • L
          luqt123 @Topi last edited by

          @topi Hello Topi,
          Thank you very much for the response!
          That is a very good reason why you can not pass directly other data types to tool output.
          So how to correctly copy this cv::Mat allocated by OpenCV function data to kuvio_image_alloc_copy(const kuvio_image* source) because it expects kuvio_image data type

          Keijo 1 Reply Last reply Reply Quote 0
          • Keijo
            Keijo @luqt123 last edited by

            @luqt123
            Hi Lukas,

            Assuming that you have already allocated space for your kuvio_image, you can copy it across using OpenCv functions. Possible functions for this are for example cv::cvtColor, cv::mixChannels and cv::merge. Please read OpenCv documentation on how they are used.

            For example, if your opencv image is a 24-bit RGB image, the copying can be done simply as follows:

            int my_opencv_function(/*params,*/  kuvio_image* imgOut)
            {
              if (imgOut->type == kuvio_rgb32_image_type)
                {
                  cv::Mat myOpenCvImage = ... // Get or create an RGB image. eg. cv::imread
                  /// ...do stuff with the image and copy to kuvio_image
                  cv::mixChannels(myOpenCvImage, OpenCvMat(imgOut, OpenCvMat::Rgb24), {0, 0, 1, 1, 2, 2});
            }
            

            Please bear in mind that the sizes of the allocated kuvio_image and the size of the image in cv::Mat myOpenCvImage must be identical.

            1 Reply Last reply Reply Quote 1
            • L
              luqt123 last edited by

              Thank you Keijo it worked!

              1 Reply Last reply Reply Quote 0
              • First post
                Last post
              Forum Terms of Use and Privacy Policy