You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
3.7 KiB
81 lines
3.7 KiB
2 months ago
|
/*###############################################################################
|
||
|
#
|
||
|
# Copyright 2020 NVIDIA Corporation
|
||
|
#
|
||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||
|
# this software and associated documentation files (the "Software"), to deal in
|
||
|
# the Software without restriction, including without limitation the rights to
|
||
|
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||
|
# the Software, and to permit persons to whom the Software is furnished to do so,
|
||
|
# subject to the following conditions:
|
||
|
#
|
||
|
# The above copyright notice and this permission notice shall be included in all
|
||
|
# copies or substantial portions of the Software.
|
||
|
#
|
||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||
|
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||
|
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||
|
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||
|
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
|
#
|
||
|
###############################################################################*/
|
||
|
|
||
|
#ifndef __NVCVOPENCV_H__
|
||
|
#define __NVCVOPENCV_H__
|
||
|
|
||
|
#include "nvCVImage.h"
|
||
|
#include "opencv2/opencv.hpp"
|
||
|
|
||
|
// Set an OpenCV Mat image from parameters
|
||
|
inline void CVImageSet(cv::Mat *cvIm, int width, int height, int numComps, int compType, int compBytes, void* pixels, size_t rowBytes) {
|
||
|
size_t pixBytes = numComps * compBytes;
|
||
|
size_t widthBytes = width * pixBytes;
|
||
|
cvIm->flags = cv::Mat::MAGIC_VAL + (CV_MAKETYPE(compType, numComps) & cv::Mat::TYPE_MASK);
|
||
|
if (rowBytes == widthBytes)
|
||
|
cvIm->flags |= cv::Mat::CONTINUOUS_FLAG;
|
||
|
cvIm->step.p = cvIm->step.buf;
|
||
|
cvIm->step[0] = rowBytes;
|
||
|
cvIm->step[1] = pixBytes;
|
||
|
cvIm->dims = 2;
|
||
|
cvIm->size = cv::MatSize(&cvIm->rows);
|
||
|
cvIm->rows = height;
|
||
|
cvIm->cols = width;
|
||
|
cvIm->data = (uchar*)pixels;
|
||
|
cvIm->datastart = (uchar*)pixels;
|
||
|
cvIm->datalimit = cvIm->datastart + rowBytes * height;
|
||
|
cvIm->dataend = cvIm->datalimit - rowBytes + widthBytes;
|
||
|
cvIm->allocator = 0;
|
||
|
cvIm->u = 0;
|
||
|
}
|
||
|
|
||
|
// Wrap an NvCVImage in a cv::Mat
|
||
|
inline void CVWrapperForNvCVImage(const NvCVImage *nvcvIm, cv::Mat *cvIm) {
|
||
|
static const char cvType[] = { 7, 0, 2, 3, 7, 7, 4, 5, 7, 7, 6 };
|
||
|
CVImageSet(cvIm, nvcvIm->width, nvcvIm->height, nvcvIm->numComponents, cvType[(int)nvcvIm->componentType], nvcvIm->componentBytes, nvcvIm->pixels, nvcvIm->pitch);
|
||
|
}
|
||
|
|
||
|
// Wrap a cv::Mat in an NvCVImage.
|
||
|
inline void NVWrapperForCVMat(const cv::Mat *cvIm, NvCVImage *nvcvIm) {
|
||
|
static const NvCVImage_PixelFormat nvFormat[] = { NVCV_FORMAT_UNKNOWN, NVCV_Y, NVCV_YA, NVCV_BGR, NVCV_BGRA };
|
||
|
static const NvCVImage_ComponentType nvType[] = { NVCV_U8, NVCV_TYPE_UNKNOWN, NVCV_U16, NVCV_S16, NVCV_S32, NVCV_F32,
|
||
|
NVCV_F64, NVCV_TYPE_UNKNOWN };
|
||
|
nvcvIm->pixels = cvIm->data;
|
||
|
nvcvIm->width = cvIm->cols;
|
||
|
nvcvIm->height = cvIm->rows;
|
||
|
nvcvIm->pitch = (int)cvIm->step[0];
|
||
|
nvcvIm->pixelFormat = nvFormat[cvIm->channels() <= 4 ? cvIm->channels() : 0];
|
||
|
nvcvIm->componentType = nvType[cvIm->depth() & 7];
|
||
|
nvcvIm->bufferBytes = 0;
|
||
|
nvcvIm->deletePtr = nullptr;
|
||
|
nvcvIm->deleteProc = nullptr;
|
||
|
nvcvIm->pixelBytes = (unsigned char)cvIm->step[1];
|
||
|
nvcvIm->componentBytes = (unsigned char)cvIm->elemSize1();
|
||
|
nvcvIm->numComponents = (unsigned char)cvIm->channels();
|
||
|
nvcvIm->planar = NVCV_CHUNKY;
|
||
|
nvcvIm->gpuMem = NVCV_CPU;
|
||
|
nvcvIm->reserved[0] = 0;
|
||
|
nvcvIm->reserved[1] = 0;
|
||
|
}
|
||
|
|
||
|
#endif // __NVCVOPENCV_H__
|