Home | History | Annotate | Download | only in OpenCVComponent
      1 // OpenCVComponent.cpp
      2 #include "pch.h"
      3 #include "OpenCVComponent.h"
      4 
      5 #include <opencv2\imgproc\types_c.h>
      6 #include <opencv2\core\core.hpp>
      7 #include <opencv2\imgproc\imgproc.hpp>
      8 #include <vector>
      9 #include <algorithm>
     10 
     11 using namespace OpenCVComponent;
     12 using namespace Platform;
     13 using namespace concurrency;
     14 using namespace Windows::Foundation;
     15 using namespace Windows::Foundation::Collections;
     16 
     17 void CopyIVectorToMatrix(IVector<int>^ input, cv::Mat& mat, int size);
     18 void CopyMatrixToVector(const cv::Mat& mat, std::vector<int>& vector, int size);
     19 
     20 OpenCVLib::OpenCVLib()
     21 {
     22 }
     23 
     24 IAsyncOperation<IVectorView<int>^>^ OpenCVLib::ProcessAsync(IVector<int>^ input, int width, int height)
     25 {
     26     int size = input->Size;
     27     cv::Mat mat(width, height, CV_8UC4);
     28     CopyIVectorToMatrix(input, mat, size);
     29 
     30     return create_async([=]() -> IVectorView<int>^
     31     {
     32         // convert to grayscale
     33         cv::Mat intermediateMat;
     34         cv::cvtColor(mat, intermediateMat, CV_RGB2GRAY);
     35 
     36         // convert to BGRA
     37         cv::cvtColor(intermediateMat, mat, CV_GRAY2BGRA);
     38 
     39         std::vector<int> output;
     40         CopyMatrixToVector(mat, output, size);
     41 
     42         // Return the outputs as a VectorView<float>
     43         return ref new Platform::Collections::VectorView<int>(output);
     44     });
     45 }
     46 
     47 
     48 void CopyIVectorToMatrix(IVector<int>^ input, cv::Mat& mat, int size)
     49 {
     50     unsigned char* data = mat.data;
     51     for (int i = 0; i < size; i++)
     52     {
     53         int value = input->GetAt(i);
     54         memcpy(data, (void*) &value, 4);
     55         data += 4;
     56     }
     57 }
     58 
     59 void CopyMatrixToVector(const cv::Mat& mat, std::vector<int>& vector, int size)
     60 {
     61     int* data = (int*) mat.data;
     62     for (int i = 0; i < size; i++)
     63     {
     64         vector.push_back(data[i]);
     65     }
     66 
     67 }