我正在尝试将一个小图像混合到一个较大图像的多个区域。下面是我的代码:
for(int i=0;i<m_numKeypoints;i++)
{
Keypoint kp = m_keyPoints[i];
kp.scale;
//cvLine(img, cvPoint(kp.xi, kp.yi), cvPoint(kp.xi, kp.yi), CV_RGB(255,255,255), 3);
//cvLine(img, cvPoint(kp.xi, kp.yi), cvPoint(kp.xi+10*cos(kp.orien[0]), kp.yi+10*sin((double)kp.orien[0])), CV_RGB(255,255,255), 1);
// find the points where X and Y is the centre of the rectangle ROI
ROIa=calculateFirstPoint(kp.xi,kp.yi,rectX,rectY);
ROIb=calculateSecondPoint(kp.xi,kp.yi,rectX,rectY);
if (kp.scale>2 && kp.scale<10)
{
ROI=yuv_channels[0](Rect(ROIa,ROIb));
addWeighted(ROI,0.5,watermark,0.5,0.0,ROI);
}
else if (i==m_numKeypoints-1)
{
merge(yuv_channels,3,resImg);
imshow("Result",resImg);
}
}
然而,当它进入IF条件时,它给了我一个"MySIFT.exe中0x5b78ad7a (msvcp100d.dll)的未处理异常:0xC0000005:访问违反读取位置0xccccccd0."i=3之后。我不知道出了什么问题,如果有人能对这个问题提出一些建议,我将不胜感激。谢谢你!
我会打印ROIa
和ROIb
的值,很可能是第四个特征,其中一个点在yuv_channels[0]
之外。