如何通过operator()使用forEach函数

时间:2019-06-21 12:39:37

标签: c++ opencv pixel

我正在尝试使用cv :: Mat类的'forEach'函数对图像的每个像素进行操作。但出现内存异常错误。

我的源图像(在HLS中)的typedef HLSPixel为double的3d点。 我已经创建了一个带有operator()重载的类。

typedef cv::Point3_<double> HLSPixel;

struct Quantize
{
    void operator()(HLSPixel& in, const int* position ) const 
    {
        if (in.y < 30)
        {
            in.y = 0;
        }
        else if(in.y > 225)
        {
            in.y = 255;
        }
        else
        {
            in.z /= 25;
            in.z *= 25;
        }
    }
};
void main()
{
    cv::VideoCapture vid("video.mp4")
    cv::Mat hls;
    cv::Mat bgr_frame;

    vid >> bgr_frame;

    cv::cvtColor(bgr_frame, hls, cv::COLOR_BGR2HLS);

    hls.forEach<HLSPixel, Quantize>(Quantize());//it crashes here.

}


我希望图像可以通过operator()处理,但是它只会崩溃:(。

0 个答案:

没有答案