0
나는 카메라에서 캡처 한 이미지를 처리하기 위해 스레딩을 구현 한 프로젝트에서 작업하고 있습니다.라이브 스트리밍의 느려지는 카메라 작동 스레딩
일정 시간 간격 후에 타이머에 의해 호출되는 ProcessFrame()
에 대한 아래 코드를 찾으십시오.
private void ProcessImage(string ImagePath)
{
#region Check for threadSafeFunction
if (this.InvokeRequired)
{
Console.WriteLine("Inside InvokeRequired");
this.Invoke(new MethodInvoker(delegate() { ProcessImage(ImagePath); }));
}
else
{
1. Detect faces in Image
2. Draw Face markers on Image
3. Some database based on result of Face Detection
4. Delete image File
}
}
느려지이었다 ProcessFrame()
기능 실꿰기 작업 가하여 : 여기
private void ProcessFrame()
{
try
{
Image<Bgr, Byte> ImageFrame;
// Get Image from the camera
ImageFrame = capture.QueryFrame();
// check if imageFrame is null or not
if (ImageFrame == null)
{
// if null then re- initialize the camera
try
{
capture.Dispose();
capture = new Capture(URL);
ImageFrame = capture.QueryFrame();
}
catch (Exception ex)
{
}
}
// resize image to show on Picture control
ImageFrame = ImageFrame.Resize(img.Width, img.Height, Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR);
// show image on picture control
img.Image = ImageFrame;
try
{
#region Making directory and image in this code
string VerifyImageFolderId = VerifyImageFolder + "\\" + "Camera_" + (1) + "\\";
if (!Directory.Exists(VerifyImageFolderId))
Directory.CreateDirectory(VerifyImageFolderId);
string VerifyImageFileName = VerifyImageFolderId + "\\" + nSavedImagesCounter + ".jpg";
img.Image.Save(VerifyImageFileName); // Save Image
nSavedImagesCounter++;
#endregion
#region Starting thread For processing Image
Thread processImage = new Thread(new ThreadStart(() => ProcessImage(VerifyImageFileName)));
processImage.Start();
#endregion
}
catch (Exception ex)
{
Log(ex.Message);
MessageBox.Show(ex.Message);
}
finally
{
GC.Collect();
}
//#endregion
}
catch (NullReferenceException e)
{
Console.Write("Exception:\n" + DateTime.Now.ToString("hhmmss"));
}
}
는 다음과 같이 일부 파일 처리 동작을 수행 할 수있는 두 번째 함수 ProcessImage(string ImagePath)
이다. 및 라이브 스트리밍을 표시 할 수 없습니다.
아무도 도와 드릴 수 있습니까?
미리 감사드립니다.
처럼 ProcessFrame를 변경 제안? –
이 코드는 일단 폼로드에 넣을 수 있으면 실행해야합니다. 또는 초기화 메소드가 있다면 거기에 넣을 수 있습니다. – Milad
답변 해 주셔서 감사합니다. 그러나 답변의 첫 번째 부분을 설명 할 수 있습니까? 왜 초기화해야합니까? 한 번? –