模糊任何移动的东西

2024-05-20 10:09:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图模糊警方行车摄像头拍摄的人。我的策略是模糊任何移动的东西。我找到了http://derek.simkowiak.net/motion-tracking-with-python/,但它使用的是旧版本的OpenCV。在使用的OpenCV版本中,我找不到任何模糊区域的例子。在

运动跟踪示例中的代码:

for box in trimmed_box_list:
    cv.Rectangle( display_image, box[0], box[1], cv.CV_RGB(0,255,0), 2 )

较新版本的OpenCV模糊了区域的示例代码:

^{pr2}$

如果有人知道如何改变旧版OpenCV的例子,那会很棒,或者如果你有更好的策略来模糊任何移动的东西,请让我知道。在


Tags: 代码版本boxhttp区域示例derek策略
1条回答
网友
1楼 · 发布于 2024-05-20 10:09:58

你所引用的链接对于你的具体想法来说是相当复杂的;从你所说的来看,你不需要担心跟踪任何移动的对象,只需模糊“任何移动的东西”

为此,我建议简单的背景减法。Here是一个链接,它演示了OpenCV支持的三种不同方法。在

下面是该页面的代码:

#include < stdio.h>
#include < iostream>

#include < opencv2\opencv.hpp>
#include < opencv2/core/core.hpp>
#include < opencv2/highgui/highgui.hpp>
#include < opencv2/video/background_segm.hpp>


#ifdef _DEBUG        
#pragma comment(lib, "opencv_core247d.lib")
#pragma comment(lib, "opencv_imgproc247d.lib")   //MAT processing
#pragma comment(lib, "opencv_objdetect247d.lib") //HOGDescriptor
//#pragma comment(lib, "opencv_gpu247d.lib")
//#pragma comment(lib, "opencv_features2d247d.lib")
#pragma comment(lib, "opencv_highgui247d.lib")
#pragma comment(lib, "opencv_ml247d.lib")
//#pragma comment(lib, "opencv_stitching247d.lib");
//#pragma comment(lib, "opencv_nonfree247d.lib");
#pragma comment(lib, "opencv_video247d.lib")
#else
#pragma comment(lib, "opencv_core247.lib")
#pragma comment(lib, "opencv_imgproc247.lib")
#pragma comment(lib, "opencv_objdetect247.lib")
//#pragma comment(lib, "opencv_gpu247.lib")
//#pragma comment(lib, "opencv_features2d247.lib")
#pragma comment(lib, "opencv_highgui247.lib")
#pragma comment(lib, "opencv_ml247.lib")
//#pragma comment(lib, "opencv_stitching247.lib");
//#pragma comment(lib, "opencv_nonfree247.lib");
#pragma comment(lib, "opencv_video247d.lib")
#endif 

using namespace cv;
using namespace std;



int main()
{

 //global variables
 Mat frame; //current frame
 Mat resizeF;
 Mat fgMaskMOG; //fg mask generated by MOG method
 Mat fgMaskMOG2; //fg mask fg mask generated by MOG2 method
 Mat fgMaskGMG; //fg mask fg mask generated by MOG2 method


 Ptr< BackgroundSubtractor> pMOG; //MOG Background subtractor
 Ptr< BackgroundSubtractor> pMOG2; //MOG2 Background subtractor
 Ptr< BackgroundSubtractorGMG> pGMG; //MOG2 Background subtractor



 pMOG = new BackgroundSubtractorMOG();
 pMOG2 = new BackgroundSubtractorMOG2();
 pGMG = new BackgroundSubtractorGMG();


 char fileName[100] = "C:\\POSCO\\video\\/cctv 2.mov"; //Gate1_175_p1.avi"; //mm2.avi"; //";//_p1.avi";
 VideoCapture stream1(fileName);   //0 is the id of video device.0 if you have only one camera   

 Mat element = getStructuringElement(MORPH_RECT, Size(3, 3), Point(1,1) );   

 //unconditional loop   
 while (true) {   
  Mat cameraFrame;   
  if(!(stream1.read(frame))) //get one frame form video   
   break;

  resize(frame, resizeF, Size(frame.size().width/4, frame.size().height/4) );
  pMOG->operator()(resizeF, fgMaskMOG);
  pMOG2->operator()(resizeF, fgMaskMOG2);
  pGMG->operator()(resizeF, fgMaskGMG);
  //morphologyEx(fgMaskGMG, fgMaskGMG, CV_MOP_OPEN, element); 




  imshow("Origin", resizeF);
  imshow("MOG", fgMaskMOG);
  imshow("MOG2", fgMaskMOG2);
  imshow("GMG", fgMaskGMG);


  if (waitKey(30) >= 0)   
   break;   
 }

}

使用它作为在场景中查找移动对象的基础,然后可以用几种方法模糊它们。我想到的一种懒散的方法是模糊图像的副本,然后使用背景减法的结果作为遮罩,将模糊的图像应用于原始图像。在每一帧上完成,这将模糊背景减法器认为正在逐帧移动的任何内容。在背景减法器工作后,仅模糊背景减法中足够大的像素组周围的矩形可能是提高效率的好方法。你甚至可以用你喜欢的任何噪音预先填充垫子,然后用它代替模糊的复印件。在

如果你只想模糊人类,事情会变得复杂得多。如果我们想让探测器在每一帧之间都能猜到人类的身份。不管怎样,你没有要求,但仅供参考。在

相关问题 更多 >