[英]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.