2013-05-02 111 views
0

我正在研究视频镜头检测的边缘变化比率算法。我有算法的基本思想,并使用OpenCV实现了其中的一部分,其中包括使用Canny算法来识别边缘。边缘变化率

但我很困惑如何找到两个视频帧之间的边缘像素和进入和退出像素的数量。 我对OpenCV的 工作请帮我一些代码或逻辑或OpenCV函数做

感谢

回答

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

+0

感谢您的回复。我认为这假设一个像素是完全黑色或白色。不会有部分彩色像素的情况吗?此外,我在计算每帧进入和退出像素的数量方面存在问题。任何帮助! – PratPor 2013-05-03 13:58:56

+0

那里不会是任何部分彩色的像素......在图像上执行Canny函数后,它只是一个二进制图像......您输入的像素和现有像素意味着什么?请你详细说一下.. – 2013-05-03 14:19:03

+0

假设我们有两个框架E和E'进行比较。所以这里是我从一篇研究论文中得到的进入和退出像素的定义。 “进入边缘像素是在当前帧E中存在的边缘,并且在下一帧E'中距离r远离 。退出边缘像素 是存在于下一帧E' 中的边缘像素,并且在当前帧E中比r更远“。这里r可以是一些像素数6。我也没有得到它的正确含义,也没有办法做到这一点。 – PratPor 2013-05-03 14:45:49