簡體   English   中英

OpenCV cv :: Mat“ + =”在循環內部

[英]OpenCV cv::Mat “+=”inside for loop

我正在研究C ++中的簡單鬼影效果。 我正在將cv::Mat圖片添加到std::vector ,我有一個可以訪問圖片,更改不透明度並將兩個添加在一起的功能,該功能可以:

void ghostEffect(std::vector<cv::Mat> &srcImages, cv::Mat &dstImage)
{
    static int currFrame = 0;
    dstImage = srcImages[currFrame%srcImages.size]*0.5+srcImages[(currFrame+1)%srcImages.size]*0.5;
    currFrame++;
}

我想使用for()循環遍歷向量中的許多圖像,但是當我這樣做時,出現段錯誤。 想知道我在做什么錯嗎?

void ghostEffect(std::vector<cv::Mat> &srcImages, cv::Mat &dstImage)
{
    static int currFrame = 0;
    for (int i = 0; i < srcImages.size; i++)
    {
        dstImage += srcImages[(currFrame+i)%srcImages.size]*(1/srcImages.size);
    }
    currFrame++;
}

該代碼段很奇怪。 不應編譯。 std::vector::size是一個方法,因此您的循環將i與方法std::vector::size的地址進行比較,該地址可能比向量的大小大得多。

如果向量的大小大於1,則表達式1/srcImages.size()也始終為零,因為int類型的參數會生成int類型。

我想您必須像下面這樣對函數進行編碼:

void ghostEffect(std::vector<cv::Mat> &srcImages, cv::Mat &dstImage)
{
    static int currFrame = 0;
    for (int i = 0; i < srcImages.size(); i++)
    {
        dstImage += srcImages[(currFrame+i)%srcImages.size()]*(1.0/srcImages.size());
    }
    currFrame++;
}

第一個代碼段通過幸運的巧合起作用,直到currFrame超過矢量大小為止。 也將srcImages.size替換為srcImages.size()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM