我正在研究用于视频镜头检测的边缘变化率算法。我有算法的基本思想,并使用 OpenCV 实现了其中的一部分,其中包括使用 Canny 算法识别边缘。
但是我对如何找到两个视频帧之间的边缘像素以及进入和退出像素的数量感到困惑。我正在研究 OpenCV 请帮助我提供一些代码或逻辑或 OpenCV 函数来完成它
谢谢
我正在研究用于视频镜头检测的边缘变化率算法。我有算法的基本思想,并使用 OpenCV 实现了其中的一部分,其中包括使用 Canny 算法识别边缘。
但是我对如何找到两个视频帧之间的边缘像素以及进入和退出像素的数量感到困惑。我正在研究 OpenCV 请帮助我提供一些代码或逻辑或 OpenCV 函数来完成它
谢谢
据我了解您的问题...如果您的灰色图像是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
。