怎么運行/opencv/modules/imgproc/test下的test_cvtyuv.cpp

怎么運行/opencv/modules/imgproc/test下的test_cvtyuv.cpp

要運行test_cvtyuv.cpp,你需要按照以下步驟操作:

  1. 獲取OpenCV源代碼,編譯并安裝opencv:首先,確保你已經下載并安裝了OpenCV。如果沒有,請前往OpenCV官方網站下載源代碼。安裝參考連接:https://blog.csdn.net/shizuguilai/article/details/136406722

  2. 運行測試:在構建build目錄中,你可以運行測試程序。使用以下命令:

    ./bin/opencv_test_imgproc --gtest_filter=cvtyuv.*
    # 或者是下面這樣?
    ./bin/opencv_test_imgproc --gtest_filter=*ColorYUV* # 運行特定的顏色轉換測試
    # 或者試試下面這個?注意!下面是gtestp不是gtest
    ./bin/opencv_test_imgproc --gtestp_filter=Imgproc_ColorYUV.accuracy
    

    這將運行與cvtyuv相關的所有測試用例。因為test_cvtyuv.cpp本身并不包含主函數(main),因為它是設計來被 OpenCV 的測試框架自動發現和執行的。測試框架(基于 Google Test)會自動識別 TEST_P 宏定義的測試用例并執行它們。

請注意,確保你的構建環境已經正確設置,以便能夠編譯和運行OpenCV。如果你遇到問題,可以查看OpenCV官方文檔或在社區尋求幫助。

祝你好運!🚀

test_cvtyuv.cpp源碼如下:

#include "test_precomp.hpp"namespace opencv_test { namespace {#undef RGB
#undef YUVtypedef Vec3b YUV;
typedef Vec3b RGB;int countOfDifferencies(const Mat& gold, const Mat& result, int maxAllowedDifference = 1)
{Mat diff;absdiff(gold, result, diff);return countNonZero(diff.reshape(1) > maxAllowedDifference);
}class YUVreader
{
public:virtual ~YUVreader() {}virtual YUV read(const Mat& yuv, int row, int col) = 0;virtual int channels() = 0;virtual Size size(Size imgSize) = 0;virtual bool requiresEvenHeight() { return true; }virtual bool requiresEvenWidth() { return true; }static YUVreader* getReader(int code);
};class RGBreader
{
public:virtual ~RGBreader() {}virtual RGB read(const Mat& rgb, int row, int col) = 0;virtual int channels() = 0;static RGBreader* getReader(int code);
};class RGBwriter
{
public:virtual ~RGBwriter() {}virtual void write(Mat& rgb, int row, int col, const RGB& val) = 0;virtual int channels() = 0;static RGBwriter* getWriter(int code);
};class GRAYwriter
{
public:virtual ~GRAYwriter() {}virtual void write(Mat& gray, int row, int col, const uchar& val){gray.at<uchar>(row, col) = val;}virtual int channels() { return 1; }static GRAYwriter* getWriter(int code);
};class YUVwriter
{
public:virtual ~YUVwriter() {}virtual void write(Mat& yuv, int row, int col, const YUV& val) = 0;virtual int channels() = 0;virtual Size size(Size imgSize) = 0;virtual bool requiresEvenHeight() { return true; }virtual bool requiresEvenWidth() { return true; }static YUVwriter* getWriter(int code);
};class RGB888Writer : public RGBwriter
{void write(Mat& rgb, int row, int col, const RGB& val){rgb.at<Vec3b>(row, col) = val;}int channels() { return 3; }
};class BGR888Writer : public RGBwriter
{void write(Mat& rgb, int row, int col, const RGB& val){Vec3b tmp(val[2], val[1], val[0]);rgb.at<Vec3b>(row, col) = tmp;}int channels() { return 3; }
};class RGBA8888Writer : public RGBwriter
{void write(Mat& rgb, int row, int col, const RGB& val){Vec4b tmp(val[0], val[1], val[2], 255);rgb.at<Vec4b>(row, col) = tmp;}int channels() { return 4; }
};class BGRA8888Writer : public RGBwriter
{void write(Mat& rgb, int row, int col, const RGB& val){Vec4b tmp(val[2], val[1], val[0], 255);rgb.at<Vec4b>(row, col) = tmp;}int channels() { return 4; }
};class YUV420pWriter: public YUVwriter
{int channels() { return 1; }Size size(Size imgSize) { return Size(imgSize.width, imgSize.height + imgSize.height/2); }
};class YV12Writer: public YUV420pWriter
{void write(Mat& yuv, int row, int col, const YUV& val){int h = yuv.rows * 2 / 3;yuv.ptr<uchar>(row)[col] = val[0];if( row % 2 == 0 && col % 2 == 0 ){yuv.ptr<uchar>(h + row/4)[col/2 + ((row/2) % 2) * (yuv.cols/2)] = val[2];yuv.ptr<uchar>(h + (row/2 + h/2)/2)[col/2 + ((row/2 + h/2) % 2) * (yuv.cols/2)] = val[1];}}
};class I420Writer: public YUV420pWriter
{void write(Mat& yuv, int row, int col, const YUV& val){int h = yuv.rows * 2 / 3;yuv.ptr<uchar>(row)[col] = val[0];if( row % 2 == 0 && col % 2 == 0 ){yuv.ptr<uchar>(h + row/4)[col/2 + ((row/2) % 2) * (yuv.cols/2)] = val[1];yuv.ptr<uchar>(h + (row/2 + h/2)/2)[col/2 + ((row/2 + h/2) % 2) * (yuv.cols/2)] = val[2];}}
};class YUV420Reader: public YUVreader
{int channels() { return 1; }Size size(Size imgSize) { return Size(imgSize.width, imgSize.height * 3 / 2); }
};class YUV422Reader: public YUVreader
{int channels() { return 2; }Size size(Size imgSize) { return imgSize; }bool requiresEvenHeight() { return false; }
};class NV21Reader: public YUV420Reader
{YUV read(const Mat& yuv, int row, int col){uchar y = yuv.ptr<uchar>(row)[col];uchar u = yuv.ptr<uchar>(yuv.rows * 2 / 3 + row/2)[(col/2)*2 + 1];uchar v = yuv.ptr<uchar>(yuv.rows * 2 / 3 + row/2)[(col/2)*2];return YUV(y, u, v);}
};struct NV12Reader: public YUV420Reader
{YUV read(const Mat& yuv, int row, int col){uchar y = yuv.ptr<uchar>(row)[col];uchar u = yuv.ptr<uchar>(yuv.rows * 2 / 3 + row/2)[(col/2)*2];uchar v = yuv.ptr<uchar>(yuv.rows * 2 / 3 + row/2)[(col/2)*2 + 1];return YUV(y, u, v);}
};class YV12Reader: public YUV420Reader
{YUV read(const Mat& yuv, int row, int col){int h = yuv.rows * 2 / 3;uchar y = yuv.ptr<uchar>(row)[col];uchar u = yuv.ptr<uchar>(h + (row/2 + h/2)/2)[col/2 + ((row/2 + h/2) % 2) * (yuv.cols/2)];uchar v = yuv.ptr<uchar>(h + row/4)[col/2 + ((row/2) % 2) * (yuv.cols/2)];return YUV(y, u, v);}
};class IYUVReader: public YUV420Reader
{YUV read(const Mat& yuv, int row, int col){int h = yuv.rows * 2 / 3;uchar y = yuv.ptr<uchar>(row)[col];uchar u = yuv.ptr<uchar>(h + row/4)[col/2 + ((row/2) % 2) * (yuv.cols/2)];uchar v = yuv.ptr<uchar>(h + (row/2 + h/2)/2)[col/2 + ((row/2 + h/2) % 2) * (yuv.cols/2)];return YUV(y, u, v);}
};class UYVYReader: public YUV422Reader
{YUV read(const Mat& yuv, int row, int col){uchar y = yuv.ptr<Vec2b>(row)[col][1];uchar u = yuv.ptr<Vec2b>(row)[(col/2)*2][0];uchar v = yuv.ptr<Vec2b>(row)[(col/2)*2 + 1][0];return YUV(y, u, v);}
};class YUY2Reader: public YUV422Reader
{YUV read(const Mat& yuv, int row, int col){uchar y = yuv.ptr<Vec2b>(row)[col][0];uchar u = yuv.ptr<Vec2b>(row)[(col/2)*2][1];uchar v = yuv.ptr<Vec2b>(row)[(col/2)*2 + 1][1];return YUV(y, u, v);}
};class YVYUReader: public YUV422Reader
{YUV read(const Mat& yuv, int row, int col){uchar y = yuv.ptr<Vec2b>(row)[col][0];uchar u = yuv.ptr<Vec2b>(row)[(col/2)*2 + 1][1];uchar v = yuv.ptr<Vec2b>(row)[(col/2)*2][1];return YUV(y, u, v);}
};class YUV888Reader : public YUVreader
{YUV read(const Mat& yuv, int row, int col){return yuv.at<YUV>(row, col);}int channels() { return 3; }Size size(Size imgSize) { return imgSize; }bool requiresEvenHeight() { return false; }bool requiresEvenWidth() { return false; }
};class RGB888Reader : public RGBreader
{RGB read(const Mat& rgb, int row, int col){return rgb.at<RGB>(row, col);}int channels() { return 3; }
};class BGR888Reader : public RGBreader
{RGB read(const Mat& rgb, int row, int col){RGB tmp = rgb.at<RGB>(row, col);return RGB(tmp[2], tmp[1], tmp[0]);}int channels() { return 3; }
};class RGBA8888Reader : public RGBreader
{RGB read(const Mat& rgb, int row, int col){Vec4b rgba = rgb.at<Vec4b>(row, col);return RGB(rgba[0], rgba[1], rgba[2]);}int channels() { return 4; }
};class BGRA8888Reader : public RGBreader
{RGB read(const Mat& rgb, int row, int col){Vec4b rgba = rgb.at<Vec4b>(row, col);return RGB(rgba[2], rgba[1], rgba[0]);}int channels() { return 4; }
};class YUV2RGB_Converter
{
public:RGB convert(YUV yuv){int y = std::max(0, yuv[0] - 16);int u = yuv[1] - 128;int v = yuv[2] - 128;uchar r = saturate_cast<uchar>(1.164f * y + 1.596f * v);uchar g = saturate_cast<uchar>(1.164f * y - 0.813f * v - 0.391f * u);uchar b = saturate_cast<uchar>(1.164f * y + 2.018f * u);return RGB(r, g, b);}
};class YUV2GRAY_Converter
{
public:uchar convert(YUV yuv){return yuv[0];}
};class RGB2YUV_Converter
{
public:YUV convert(RGB rgb){int r = rgb[0];int g = rgb[1];int b = rgb[2];uchar y = saturate_cast<uchar>((int)( 0.257f*r + 0.504f*g + 0.098f*b + 0.5f) + 16);uchar u = saturate_cast<uchar>((int)(-0.148f*r - 0.291f*g + 0.439f*b + 0.5f) + 128);uchar v = saturate_cast<uchar>((int)( 0.439f*r - 0.368f*g - 0.071f*b + 0.5f) + 128);return YUV(y, u, v);}
};YUVreader* YUVreader::getReader(int code)
{switch(code){case COLOR_YUV2RGB_NV12:case COLOR_YUV2BGR_NV12:case COLOR_YUV2RGBA_NV12:case COLOR_YUV2BGRA_NV12:return new NV12Reader();case COLOR_YUV2RGB_NV21:case COLOR_YUV2BGR_NV21:case COLOR_YUV2RGBA_NV21:case COLOR_YUV2BGRA_NV21:return new NV21Reader();case COLOR_YUV2RGB_YV12:case COLOR_YUV2BGR_YV12:case COLOR_YUV2RGBA_YV12:case COLOR_YUV2BGRA_YV12:return new YV12Reader();case COLOR_YUV2RGB_IYUV:case COLOR_YUV2BGR_IYUV:case COLOR_YUV2RGBA_IYUV:case COLOR_YUV2BGRA_IYUV:return new IYUVReader();case COLOR_YUV2RGB_UYVY:case COLOR_YUV2BGR_UYVY:case COLOR_YUV2RGBA_UYVY:case COLOR_YUV2BGRA_UYVY:return new UYVYReader();//case COLOR_YUV2RGB_VYUY = 109,//case COLOR_YUV2BGR_VYUY = 110,//case COLOR_YUV2RGBA_VYUY = 113,//case COLOR_YUV2BGRA_VYUY = 114,//    return ??case COLOR_YUV2RGB_YUY2:case COLOR_YUV2BGR_YUY2:case COLOR_YUV2RGBA_YUY2:case COLOR_YUV2BGRA_YUY2:return new YUY2Reader();case COLOR_YUV2RGB_YVYU:case COLOR_YUV2BGR_YVYU:case COLOR_YUV2RGBA_YVYU:case COLOR_YUV2BGRA_YVYU:return new YVYUReader();case COLOR_YUV2GRAY_420:return new NV21Reader();case COLOR_YUV2GRAY_UYVY:return new UYVYReader();case COLOR_YUV2GRAY_YUY2:return new YUY2Reader();case COLOR_YUV2BGR:case COLOR_YUV2RGB:return new YUV888Reader();default:return 0;}
}RGBreader* RGBreader::getReader(int code)
{switch(code){case COLOR_RGB2YUV_YV12:case COLOR_RGB2YUV_I420:return new RGB888Reader();case COLOR_BGR2YUV_YV12:case COLOR_BGR2YUV_I420:return new BGR888Reader();case COLOR_RGBA2YUV_I420:case COLOR_RGBA2YUV_YV12:return new RGBA8888Reader();case COLOR_BGRA2YUV_YV12:case COLOR_BGRA2YUV_I420:return new BGRA8888Reader();default:return 0;};
}RGBwriter* RGBwriter::getWriter(int code)
{switch(code){case COLOR_YUV2RGB_NV12:case COLOR_YUV2RGB_NV21:case COLOR_YUV2RGB_YV12:case COLOR_YUV2RGB_IYUV:case COLOR_YUV2RGB_UYVY://case COLOR_YUV2RGB_VYUY:case COLOR_YUV2RGB_YUY2:case COLOR_YUV2RGB_YVYU:case COLOR_YUV2RGB:return new RGB888Writer();case COLOR_YUV2BGR_NV12:case COLOR_YUV2BGR_NV21:case COLOR_YUV2BGR_YV12:case COLOR_YUV2BGR_IYUV:case COLOR_YUV2BGR_UYVY://case COLOR_YUV2BGR_VYUY:case COLOR_YUV2BGR_YUY2:case COLOR_YUV2BGR_YVYU:case COLOR_YUV2BGR:return new BGR888Writer();case COLOR_YUV2RGBA_NV12:case COLOR_YUV2RGBA_NV21:case COLOR_YUV2RGBA_YV12:case COLOR_YUV2RGBA_IYUV:case COLOR_YUV2RGBA_UYVY://case COLOR_YUV2RGBA_VYUY:case COLOR_YUV2RGBA_YUY2:case COLOR_YUV2RGBA_YVYU:return new RGBA8888Writer();case COLOR_YUV2BGRA_NV12:case COLOR_YUV2BGRA_NV21:case COLOR_YUV2BGRA_YV12:case COLOR_YUV2BGRA_IYUV:case COLOR_YUV2BGRA_UYVY://case COLOR_YUV2BGRA_VYUY:case COLOR_YUV2BGRA_YUY2:case COLOR_YUV2BGRA_YVYU:return new BGRA8888Writer();default:return 0;};
}GRAYwriter* GRAYwriter::getWriter(int code)
{switch(code){case COLOR_YUV2GRAY_420:case COLOR_YUV2GRAY_UYVY:case COLOR_YUV2GRAY_YUY2:return new GRAYwriter();default:return 0;}
}YUVwriter* YUVwriter::getWriter(int code)
{switch(code){case COLOR_RGB2YUV_YV12:case COLOR_BGR2YUV_YV12:case COLOR_RGBA2YUV_YV12:case COLOR_BGRA2YUV_YV12:return new YV12Writer();case COLOR_RGB2YUV_I420:case COLOR_BGR2YUV_I420:case COLOR_RGBA2YUV_I420:case COLOR_BGRA2YUV_I420:return new I420Writer();default:return 0;};
}template<class convertor>
void referenceYUV2RGB(const Mat& yuv, Mat& rgb, YUVreader* yuvReader, RGBwriter* rgbWriter)
{convertor cvt;for(int row = 0; row < rgb.rows; ++row)for(int col = 0; col < rgb.cols; ++col)rgbWriter->write(rgb, row, col, cvt.convert(yuvReader->read(yuv, row, col)));
}template<class convertor>
void referenceYUV2GRAY(const Mat& yuv, Mat& rgb, YUVreader* yuvReader, GRAYwriter* grayWriter)
{convertor cvt;for(int row = 0; row < rgb.rows; ++row)for(int col = 0; col < rgb.cols; ++col)grayWriter->write(rgb, row, col, cvt.convert(yuvReader->read(yuv, row, col)));
}template<class convertor>
void referenceRGB2YUV(const Mat& rgb, Mat& yuv, RGBreader* rgbReader, YUVwriter* yuvWriter)
{convertor cvt;for(int row = 0; row < rgb.rows; ++row)for(int col = 0; col < rgb.cols; ++col)yuvWriter->write(yuv, row, col, cvt.convert(rgbReader->read(rgb, row, col)));
}struct ConversionYUV
{explicit ConversionYUV( const int code ){yuvReader_  = YUVreader :: getReader(code);yuvWriter_  = YUVwriter :: getWriter(code);rgbReader_  = RGBreader :: getReader(code);rgbWriter_  = RGBwriter :: getWriter(code);grayWriter_ = GRAYwriter:: getWriter(code);}~ConversionYUV(){if (yuvReader_)delete yuvReader_;if (yuvWriter_)delete yuvWriter_;if (rgbReader_)delete rgbReader_;if (rgbWriter_)delete rgbWriter_;if (grayWriter_)delete grayWriter_;}int getDcn(){return (rgbWriter_ != 0) ? rgbWriter_->channels() : ((grayWriter_ != 0) ? grayWriter_->channels() : yuvWriter_->channels());}int getScn(){return (yuvReader_ != 0) ? yuvReader_->channels() : rgbReader_->channels();}Size getSrcSize( const Size& imgSize ){return (yuvReader_ != 0) ? yuvReader_->size(imgSize) : imgSize;}Size getDstSize( const Size& imgSize ){return (yuvWriter_ != 0) ? yuvWriter_->size(imgSize) : imgSize;}bool requiresEvenHeight(){return (yuvReader_ != 0) ? yuvReader_->requiresEvenHeight() : ((yuvWriter_ != 0) ? yuvWriter_->requiresEvenHeight() : false);}bool requiresEvenWidth(){return (yuvReader_ != 0) ? yuvReader_->requiresEvenWidth() : ((yuvWriter_ != 0) ? yuvWriter_->requiresEvenWidth() : false);}YUVreader*  yuvReader_;YUVwriter*  yuvWriter_;RGBreader*  rgbReader_;RGBwriter*  rgbWriter_;GRAYwriter* grayWriter_;
};CV_ENUM(YUVCVTS, COLOR_YUV2RGB_NV12, COLOR_YUV2BGR_NV12, COLOR_YUV2RGB_NV21, COLOR_YUV2BGR_NV21,COLOR_YUV2RGBA_NV12, COLOR_YUV2BGRA_NV12, COLOR_YUV2RGBA_NV21, COLOR_YUV2BGRA_NV21,COLOR_YUV2RGB_YV12, COLOR_YUV2BGR_YV12, COLOR_YUV2RGB_IYUV, COLOR_YUV2BGR_IYUV,COLOR_YUV2RGBA_YV12, COLOR_YUV2BGRA_YV12, COLOR_YUV2RGBA_IYUV, COLOR_YUV2BGRA_IYUV,COLOR_YUV2RGB_UYVY, COLOR_YUV2BGR_UYVY, COLOR_YUV2RGBA_UYVY, COLOR_YUV2BGRA_UYVY,COLOR_YUV2RGB_YUY2, COLOR_YUV2BGR_YUY2, COLOR_YUV2RGB_YVYU, COLOR_YUV2BGR_YVYU,COLOR_YUV2RGBA_YUY2, COLOR_YUV2BGRA_YUY2, COLOR_YUV2RGBA_YVYU, COLOR_YUV2BGRA_YVYU,COLOR_YUV2GRAY_420, COLOR_YUV2GRAY_UYVY, COLOR_YUV2GRAY_YUY2,COLOR_YUV2BGR, COLOR_YUV2RGB, COLOR_RGB2YUV_YV12, COLOR_BGR2YUV_YV12, COLOR_RGBA2YUV_YV12,COLOR_BGRA2YUV_YV12, COLOR_RGB2YUV_I420, COLOR_BGR2YUV_I420, COLOR_RGBA2YUV_I420, COLOR_BGRA2YUV_I420)typedef ::testing::TestWithParam<YUVCVTS> Imgproc_ColorYUV;TEST_P(Imgproc_ColorYUV, accuracy)
{int code = GetParam();RNG& random = theRNG();ConversionYUV cvt(code);const int scn = cvt.getScn();const int dcn = cvt.getDcn();for(int iter = 0; iter < 30; ++iter){Size sz(random.uniform(1, 641), random.uniform(1, 481));if(cvt.requiresEvenWidth())  sz.width  += sz.width % 2;if(cvt.requiresEvenHeight()) sz.height += sz.height % 2;Size srcSize = cvt.getSrcSize(sz);Mat src = Mat(srcSize.height, srcSize.width * scn, CV_8UC1).reshape(scn);Size dstSize = cvt.getDstSize(sz);Mat dst = Mat(dstSize.height, dstSize.width * dcn, CV_8UC1).reshape(dcn);Mat gold(dstSize, CV_8UC(dcn));random.fill(src, RNG::UNIFORM, 0, 256);if(cvt.rgbWriter_)referenceYUV2RGB<YUV2RGB_Converter>  (src, gold, cvt.yuvReader_, cvt.rgbWriter_);else if(cvt.grayWriter_)referenceYUV2GRAY<YUV2GRAY_Converter>(src, gold, cvt.yuvReader_, cvt.grayWriter_);else if(cvt.yuvWriter_)referenceRGB2YUV<RGB2YUV_Converter>  (src, gold, cvt.rgbReader_, cvt.yuvWriter_);cv::cvtColor(src, dst, code, -1);EXPECT_EQ(0, countOfDifferencies(gold, dst));}
}TEST_P(Imgproc_ColorYUV, roi_accuracy)
{int code = GetParam();RNG& random = theRNG();ConversionYUV cvt(code);const int scn = cvt.getScn();const int dcn = cvt.getDcn();for(int iter = 0; iter < 30; ++iter){Size sz(random.uniform(1, 641), random.uniform(1, 481));if(cvt.requiresEvenWidth())  sz.width  += sz.width % 2;if(cvt.requiresEvenHeight()) sz.height += sz.height % 2;int roi_offset_top = random.uniform(0, 6);int roi_offset_bottom = random.uniform(0, 6);int roi_offset_left = random.uniform(0, 6);int roi_offset_right = random.uniform(0, 6);Size srcSize = cvt.getSrcSize(sz);Mat src_full(srcSize.height + roi_offset_top + roi_offset_bottom, srcSize.width + roi_offset_left + roi_offset_right, CV_8UC(scn));Size dstSize = cvt.getDstSize(sz);Mat dst_full(dstSize.height  + roi_offset_left + roi_offset_right, dstSize.width + roi_offset_top + roi_offset_bottom, CV_8UC(dcn), Scalar::all(0));Mat gold_full(dst_full.size(), CV_8UC(dcn), Scalar::all(0));random.fill(src_full, RNG::UNIFORM, 0, 256);Mat src = src_full(Range(roi_offset_top, roi_offset_top + srcSize.height), Range(roi_offset_left, roi_offset_left + srcSize.width));Mat dst = dst_full(Range(roi_offset_left, roi_offset_left + dstSize.height), Range(roi_offset_top, roi_offset_top + dstSize.width));Mat gold = gold_full(Range(roi_offset_left, roi_offset_left + dstSize.height), Range(roi_offset_top, roi_offset_top + dstSize.width));if(cvt.rgbWriter_)referenceYUV2RGB<YUV2RGB_Converter>  (src, gold, cvt.yuvReader_, cvt.rgbWriter_);else if(cvt.grayWriter_)referenceYUV2GRAY<YUV2GRAY_Converter>(src, gold, cvt.yuvReader_, cvt.grayWriter_);else if(cvt.yuvWriter_)referenceRGB2YUV<RGB2YUV_Converter>  (src, gold, cvt.rgbReader_, cvt.yuvWriter_);cv::cvtColor(src, dst, code, -1);EXPECT_EQ(0, countOfDifferencies(gold_full, dst_full));}
}INSTANTIATE_TEST_CASE_P(cvt420, Imgproc_ColorYUV,::testing::Values((int)COLOR_YUV2RGB_NV12, (int)COLOR_YUV2BGR_NV12, (int)COLOR_YUV2RGB_NV21, (int)COLOR_YUV2BGR_NV21,(int)COLOR_YUV2RGBA_NV12, (int)COLOR_YUV2BGRA_NV12, (int)COLOR_YUV2RGBA_NV21, (int)COLOR_YUV2BGRA_NV21,(int)COLOR_YUV2RGB_YV12, (int)COLOR_YUV2BGR_YV12, (int)COLOR_YUV2RGB_IYUV, (int)COLOR_YUV2BGR_IYUV,(int)COLOR_YUV2RGBA_YV12, (int)COLOR_YUV2BGRA_YV12, (int)COLOR_YUV2RGBA_IYUV, (int)COLOR_YUV2BGRA_IYUV,(int)COLOR_YUV2GRAY_420, (int)COLOR_RGB2YUV_YV12, (int)COLOR_BGR2YUV_YV12, (int)COLOR_RGBA2YUV_YV12,(int)COLOR_BGRA2YUV_YV12, (int)COLOR_RGB2YUV_I420, (int)COLOR_BGR2YUV_I420, (int)COLOR_RGBA2YUV_I420,(int)COLOR_BGRA2YUV_I420));INSTANTIATE_TEST_CASE_P(cvt422, Imgproc_ColorYUV,::testing::Values((int)COLOR_YUV2RGB_UYVY, (int)COLOR_YUV2BGR_UYVY, (int)COLOR_YUV2RGBA_UYVY, (int)COLOR_YUV2BGRA_UYVY,(int)COLOR_YUV2RGB_YUY2, (int)COLOR_YUV2BGR_YUY2, (int)COLOR_YUV2RGB_YVYU, (int)COLOR_YUV2BGR_YVYU,(int)COLOR_YUV2RGBA_YUY2, (int)COLOR_YUV2BGRA_YUY2, (int)COLOR_YUV2RGBA_YVYU, (int)COLOR_YUV2BGRA_YVYU,(int)COLOR_YUV2GRAY_UYVY, (int)COLOR_YUV2GRAY_YUY2));}TEST(cvtColorUYVY, size_issue_21035)
{Mat input = Mat::zeros(1, 1, CV_8UC2);Mat output;EXPECT_THROW(cv::cvtColor(input, output, cv::COLOR_YUV2BGR_UYVY), cv::Exception);
}} // namespace

源:

(1) openCV:環境配置和測試代碼_opencv配置好了,怎么在studio中測試包含的代碼-CSDN博客.
(2) imgproc 模塊. 圖像處理 — OpenCV 2.3.2 documentation.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715960.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715960.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715960.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode630. 課程表 III

Every day a Leetcode 題目來源&#xff1a;630. 課程表 III 解法1&#xff1a;反悔貪心 經驗告訴我們&#xff0c;在準備期末考試的時候&#xff0c;先考的課程先準備。同理&#xff0c;lastDay 越早的課程&#xff0c;應當越早上完。但是&#xff0c;有的課程 duration 比…

2023年09月CCF-GESP編程能力等級認證Scratch圖形化編程四級真題解析

一、單選題(共15題,共30分) 第1題 人們所使用的手機上安裝的 App 通常指的是( )。 A:一款操作系統 B:一款應用軟件 C:一種通話設備 D:以上都不對 答案:B 第2題 下列流程圖的輸出結果是?( ) A:9 B:7 C:5 D:11 答案:A 第3題 默認小貓角色,執行下列程序…

IO,硬盤與文件

IO與計算機存儲空間 IO&#xff08;輸入/輸出&#xff09;是計算機領域中指的是數據在計算機與外部設備之間的傳輸過程。存儲通常指的是計算機中用來保存數據的介質或設備&#xff0c;硬盤是存儲設備的一種&#xff0c;通常是指硬盤驅動器&#xff08;Hard Disk Drive&#xf…

文章解讀與仿真程序復現思路——電網技術EI\CSCD\北大核心《考慮時空相關性的流域水風光多能互補系統高維不確定性場景生成方法》

本專欄欄目提供文章與程序復現思路&#xff0c;具體已有的論文與論文源程序可翻閱本博主免費的專欄欄目《論文與完整程序》 論文與完整源程序_電網論文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 這篇文章的標題涵蓋了以下幾個關鍵方…

C語言編程大題

以下總結編程大題的常考題型 1,輸出 100-200 之間所有素數。 要求: (1)編寫一個判斷一個整數是否為素數的函數 void prime(int n),若是素數則輸出,否則不輸出 (2)主函數中調用 prime 函數,輸出 100-200 之間所有素數 說明:素數是指除了1和該數本身之外,不能被其它任何整…

【C++】用命名空間避免命名沖突

&#x1f338;博主主頁&#xff1a;釉色清風&#x1f338;文章專欄&#xff1a;C&#x1f338;今日語錄&#xff1a;如果神明還不幫你&#xff0c;說明他相信你。 &#x1fab7;文章簡介&#xff1a;這篇文章是結合譚浩強老師的書以及自己的理解&#xff0c;同時加入了一些例子…

NOC2023軟件創意編程(學而思賽道)python小高組初賽真題

軟件創意編程 一、參賽范圍 1.參賽組別:小學低年級組(1-3 年級)、小學高年級組(4-6 年級)、初中組。 2.參賽人數:1 人。 3.指導教師:1 人(可空缺)。 4.每人限參加 1 個賽項。 組別確定:以地方教育行政主管部門(教委、教育廳、教育局) 認定的選手所屬學段為準。 二、…

MATLAB知識點:if條件判斷語句的嵌套

?講解視頻&#xff1a;可以在bilibili搜索《MATLAB教程新手入門篇——數學建模清風主講》。? MATLAB教程新手入門篇&#xff08;數學建模清風主講&#xff0c;適合零基礎同學觀看&#xff09;_嗶哩嗶哩_bilibili 節選自?第4章&#xff1a;MATLAB程序流程控制 我們通過一個…

基于springboot+vue的教師工作量管理系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

Java集合-Map接口

在Java中&#xff0c;Map接口表示鍵值對的集合&#xff0c;其中每個鍵都是唯一的&#xff0c;并且每個鍵映射到一個值。Map接口是集合框架中的一部分&#xff0c;位于java.util包中。它定義了一系列操作來管理鍵值對&#xff0c;例如添加鍵值對、刪除鍵值對、獲取鍵對應的值等。…

7.1.1 selenium介紹及安裝chromedriver

目錄 1. Selenium的用途 2. 安裝Selenium庫 3. 安裝chromedriver 1. 查看谷歌版本號?編輯 2. 找到最新版本及下載 3. 配置環境變量 4. 檢測是否配置成功 5. 用python初始化瀏覽器對象檢測&#xff1a; 6. 參考鏈接 1. Selenium的用途 在前面我們提到&#xff1a;在我…

Github項目推薦-LightMirrors

項目地址 https://github.com/NoCLin/LightMirrors 項目簡述 “LightMirrors是一個開源的緩存鏡像站服務&#xff0c;用于加速軟件包下載和鏡像拉取。目前支持DockerHub、PyPI、PyTorch、NPM等鏡像緩存服務。 當前項目仍處于早期階段。”–來自項目說明。 也就是說&#xff…

爆紅提醒:ESLint: Parsing error: Unexpected token. Did you mean `{‘>‘}` or `gt;`?

錯誤情況&#xff1a;> 會爆紅提示&#xff1a;ESLint: Parsing error: Unexpected token. Did you mean {>} or >? function().then((res) > {console.log(res.data); }解決方法&#xff1a;修改.eslintrc或者.eslintrc.js的配置 module.exports {// 其他配置..…

RocketMq——Consume相關源碼

摘要 RocketMQ只要有CommitLog文件就可以正常運行了&#xff0c;那為何還要維護ConsumeQueue文件呢&#xff1f; ConsumeQueue是消費隊列&#xff0c;引入它的目的是為了提高消費者的消費速度。畢竟RocketMQ是基于Topic主題訂閱模式的&#xff0c;消費者往往只關心自己訂閱的…

定制開發一款家政小程序,應知應會

引言 在這個快節奏的現代生活中&#xff0c;人們對高效、便捷的家政服務的需求日益增加。隨著社會結構的變化和職業生活的繁忙&#xff0c;許多家庭面臨著時間不足、精力不濟的挑戰。在這種情況下&#xff0c;家政服務成為解決問題的有效途徑。然而&#xff0c;傳統的家政服務…

Python——桌面攝像頭軟件(附源碼+打包)

目錄 一、前言 二、桌面攝像頭軟件 2.1、下載項目 2.2、功能介紹 三、打包工具&#xff08;nuitka&#xff09; 四、項目文件復制&#xff08;我全部合到一個文件里面了&#xff09; 五、結語 一、前言 看見b站的向軍大叔用electron制作了一個桌面攝像頭軟件 但是&#x…

PPT 批量刪除每頁相同位置的內容

方法&#xff1a; 選擇【視圖】&#xff0c;【宏】&#xff0c;設置宏的名稱&#xff0c;點創建將下列函數復制到宏中&#xff0c;在ppt中先選擇某個要刪除的對象&#xff0c;然后運行宏即可 函數內容如下 Sub Delete( ) Dim oSlide As Slide, oShape As Shape Dim myWidt…

如何在jupyter notebook 中下載第三方庫

在anconda 中找到&#xff1a; Anaconda Prompt 進入頁面后的樣式&#xff1a; 在黑色框中輸入&#xff1a; 下載第三方庫的命令 第三方庫&#xff1a; 三種輸入方式 標準保證正確 pip instsall 包名 -i 鏡像源地址 pip install pip 是 Python 包管理工具&#xff0c;…

新項目,Linux上一鍵安裝MySQL,Redis,Nacos,Minio

大家好&#xff0c;我是 jonssonyan 分享一個我的一個開源項目&#xff0c;這是一個在 Linux 平臺上一鍵安裝各種軟件的腳本項目&#xff0c;腳本使用 Shell 語言編寫&#xff0c;后續還會增加更多軟件的一鍵安裝&#xff0c;代碼在 GitHub 上全部開源的&#xff0c;開源地址如…

【Python】進階學習:pandas--如何根據指定條件篩選數據

【Python】進階學習&#xff1a;pandas–如何根據指定條件篩選數據 &#x1f308; 個人主頁&#xff1a;高斯小哥 &#x1f525; 高質量專欄&#xff1a;Matplotlib之旅&#xff1a;零基礎精通數據可視化、Python基礎【高質量合集】、PyTorch零基礎入門教程&#x1f448; 希望…