打开cv错误:断言失败(视频帧上的IIR过滤器)

时间:2018-01-29 05:23:10

标签: c++ opencv

在下面的代码中我想在电影帧上应用temp_rec过滤器。

但我得错误断言失败了。

使用video_line_extractor函数提取行中像素的时间序列 然后在主要我将时间过滤器应用于图像的所有行。

我知道这是一个效率低下的本机代码但我不能使用opencv内部代码 函数而不是我的temp_rec函数。

 int width_frame, heigth_frame, num_frames;
 VideoCapture cap; 


void temp_rec(float* in, float* out, int w, float tau) {

    float yp;
    float tauo = 1 / tau;

    for (int i = 0; i<w;i++) {

        if (i == 0) {
            *out = tauo*(*in);
        }
        else {

            out -= 1;
            yp = *(out);
            out += 1;

            *(out) = tauo*(*(in)) + ((exp(-tauo))*yp);
        }
        out += 1;
        in += 1;//prepare for calculate next element

    }


}

Mat video_line_extractor(int whichrow) {//extract a row of frames

    // Create a VideoCapture object and open the input file
    // If the input is the web camera, pass 0 instead of the video file name
    cap = VideoCapture("a valid path");

    int frame_counter = 0;
    Mat M_temp = Mat::eye(width_frame, num_frames, CV_8UC3);

    // Check if camera opened successfully
    if (!cap.isOpened()) {
        cout << "Error opening video stream or file :(" << endl;
    }

    while (frame_counter<num_frames) {

        Mat frame;
        // Capture frame-by-frame
        cap >> frame;

        // If the frame is empty, break immediately
        if (frame.empty())
            break;

        cvtColor(frame, frame, CV_BGR2GRAY);



        for(int j=0;j<width_frame;j++) //we in above first extract a movie frame that as we know it is a image
            //in this 'for' we extract that row data with a pointer to one of the row in th M_temp  
        M_temp.at<uchar>(frame_counter , j) = frame.ptr<uchar>(whichrow)[j];

        frame_counter++;
    }

    // When everything done, release the video capture object
    cap.release();


    return M_temp;

}



int main() {

    cap=VideoCapture("a valid path");

    width_frame = cap.get(CV_CAP_PROP_FRAME_WIDTH);
    heigth_frame = cap.get(CV_CAP_PROP_FRAME_HEIGHT);
    num_frames = cap.get(CV_CAP_PROP_FRAME_COUNT);

    Mat image= Mat::zeros(width_frame, num_frames, CV_8UC3);//initalize input
    Mat image_o = Mat::zeros(width_frame, num_frames, CV_8UC3);//initialize output

    for (int jj = 0;jj < heigth_frame;jj++) {
        image = video_line_extractor(jj);

        for (int j = 0;j < width_frame;j++)
            temp_rec((float *)image.ptr<uchar>(j), (float *)image_o.ptr<uchar>(j), num_frames, 10);

    }


    imshow("Image", image);

    waitKey(0);
    return 0;
}

编辑:断言错误 https://i.stack.imgur.com/BGGu0.png

1 个答案:

答案 0 :(得分:0)

public async void FetchOrders()
{
    RestClient client = new RestClient("https://mws.amazonservices.de");
    client.DefaultParameters.Clear();
    client.ClearHandlers();

    Dictionary<string, string> parameters = new Dictionary<string, string>();
    parameters.Add("AWSAccessKeyId", "xxxxxxxxxx");
    parameters.Add("Action", "ListOrders");
    parameters.Add("CreatedAfter", "2018-01-01T11:34:00Z");
    parameters.Add("MarketplaceId.Id.1", "A1PA6795UKMFR9");
    parameters.Add("SellerId", "xxxxxxxxx");
    parameters.Add("SignatureVersion", "2");
    parameters.Add("Timestamp", DateTime.UtcNow.ToString("s") + "Z");
    parameters.Add("Version", "2013-09-01");

    RestRequest request = new RestRequest("Orders/2013-09-01/", Method.POST);

    string signature = AmzLibrary.SignParameters(parameters, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
    request.AddParameter("Signature", signature);

    foreach (KeyValuePair<string, string> keyValuePair in parameters)
    {
        request.AddParameter(keyValuePair.Key, keyValuePair.Value);
    }

    IRestResponse result = await client.ExecuteTaskAsync(request);
}



public static class AmzLibrary
{
    public static string GetParametersAsString(IDictionary<String, String> parameters)
    {
        StringBuilder data = new StringBuilder();
        foreach (String key in (IEnumerable<String>)parameters.Keys)
        {
            String value = parameters[key];
            if (value != null)
            {
                data.Append(key);
                data.Append('=');
                data.Append(UrlEncode(value, false));
                data.Append('&');
            }
        }
        String result = data.ToString();
        return result.Remove(result.Length - 1);
    }

    public static String SignParameters(IDictionary<String, String> parameters, String key)
    {
        String signatureVersion = parameters["SignatureVersion"];

        KeyedHashAlgorithm algorithm = new HMACSHA1();

        String stringToSign = null;
        if ("2".Equals(signatureVersion))
        {
            String signatureMethod = "HmacSHA256";
            algorithm = KeyedHashAlgorithm.Create(signatureMethod.ToUpper());
            parameters.Add("SignatureMethod", signatureMethod);
            stringToSign = CalculateStringToSignV2(parameters);
        }
        else
        {
            throw new Exception("Invalid Signature Version specified");
        }

        return Sign(stringToSign, key, algorithm);
    }

    private static String CalculateStringToSignV2(IDictionary<String, String> parameters)
    {
        StringBuilder data = new StringBuilder();
        IDictionary<String, String> sorted =
              new SortedDictionary<String, String>(parameters, StringComparer.Ordinal);
        data.Append("POST");
        data.Append("\n");
        Uri endpoint = new Uri("https://mws.amazonservices.de/Orders/2013-09-01");

        data.Append(endpoint.Host);
        if (endpoint.Port != 443 && endpoint.Port != 80)
        {
            data.Append(":")
                .Append(endpoint.Port);
        }
        data.Append("\n");
        String uri = endpoint.AbsolutePath;
        if (uri == null || uri.Length == 0)
        {
            uri = "/";
        }
        data.Append(UrlEncode(uri, true));
        data.Append("\n");
        foreach (KeyValuePair<String, String> pair in sorted)
        {
            if (pair.Value != null)
            {
                data.Append(UrlEncode(pair.Key, false));
                data.Append("=");
                data.Append(UrlEncode(pair.Value, false));
                data.Append("&");
            }

        }

        String result = data.ToString();
        return result.Remove(result.Length - 1);
    }

    private static String UrlEncode(String data, bool path)
    {
        StringBuilder encoded = new StringBuilder();
        String unreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~" + (path ? "/" : "");

        foreach (char symbol in System.Text.Encoding.UTF8.GetBytes(data))
        {
            if (unreservedChars.IndexOf(symbol) != -1)
            {
                encoded.Append(symbol);
            }
            else
            {
                encoded.Append("%" + String.Format("{0:X2}", (int)symbol));
            }
        }

        return encoded.ToString();

    }

    private static String Sign(String data, String key, KeyedHashAlgorithm algorithm)
    {
        Encoding encoding = new UTF8Encoding();
        algorithm.Key = encoding.GetBytes(key);
        return Convert.ToBase64String(algorithm.ComputeHash(
            encoding.GetBytes(data.ToCharArray())));
    }
}