我正在研究用于视频镜头检测的边缘变化率算法。我有算法的基本思想,并使用OpenCV实现了它的一部分,其中包括使用Canny算法识别边缘。
但我对如何在两个视频帧之间找到边缘像素和进入和退出像素的数量感到困惑。 我正在开发OpenCV 请帮我一些代码或逻辑或OpenCV函数来做到这一点
由于
答案 0 :(得分:0)
据我了解您的问题...如果您的灰色图像为frameg
,则以下API会生成带边的图像..
Canny(frameg,frameEdge,50,150,3,false);
其中frameEdge
是包含边缘的图像。 frameEdge
是二进制图像,边缘像素为白色(255),其他像素为黑色(0)。
for(int r = 0;r<frameEdge.rows;r++)
{
for(int c=0;c<frameEdge.cols;c++)
{
if( *(frameEdge.data + frameEdge.cols*r + c) == (uchar)255 )
{
Point edgepixel;
edgepixel.x = c; edgepixel.y = r;
myedges.push_back(edgepixel);
}
}
}
因此,您可以轻松扫描图像并找到白色像素并存储其位置。这样你就可以找到边缘像素。创建一个数组vector<Point> myedges
来存储边缘像素位置。对视频中的每个帧执行此操作并进行必要的比较。注意:我拍摄的照片为cv::Mat
。您也可以使用IplImage
。