Advertisement
Guest User

Multithreding Edge detection

a guest
Feb 22nd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.09 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using OpenCvSharp;
  12. using OpenCvSharp.Extensions;
  13. namespace Vaizdai2
  14. {
  15. public partial class Form1 : Form
  16. {
  17.  
  18. Mat image;
  19. Mat prcsImage;
  20. Thread camThread;
  21.  
  22. public Form1()
  23. {
  24. camThread = new Thread(Run);
  25. // camThread.IsBackground = true;
  26. InitializeComponent();
  27. }
  28.  
  29. private void Btn_LoadPicture_Clicked(object sender, MouseEventArgs e)
  30. {
  31.  
  32.  
  33. try
  34. {
  35. image = new Mat(txtBox_ImagePath.Text, ImreadModes.Color);
  36. pictureBox1.Image = image.ToBitmap();
  37. pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
  38. pictureBox1.Refresh();
  39. }
  40. catch (Exception)
  41. {
  42. MessageBox.Show("Invalid path name");
  43. }
  44. }
  45.  
  46. private void Btn_Proccess_Clicked(object sender, MouseEventArgs e)
  47. {
  48. if (image != null)
  49. {
  50. prcsImage = FilteredImage(image);
  51.  
  52. pictureBox2.Image = prcsImage.ToBitmap();
  53. pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
  54.  
  55. pictureBox2.Refresh();
  56. }
  57. }
  58.  
  59. private Mat FilteredImage(Mat input)
  60. {
  61. //Sukuriame filtro laukeli
  62. Mat renata = Mat.Zeros(new OpenCvSharp.Size(3, 3), MatType.CV_32F);
  63.  
  64. //pakeiciam nulius i 1/9. Blur filtras
  65. /* for (int i = 0; i < 3; i++)
  66. for (int j = 0; j < 3; j++)
  67. renata.Set<Vec2f>(i, j, new Vec2f(0.1f, 0.1f));*/
  68. Random rnd = new Random();
  69. float a = rnd.Next(-10, 10);
  70.  
  71. renata.Set<Vec2f>(0,0, new Vec2f(-1, -1));
  72. renata.Set<Vec2f>(0, 1, new Vec2f(-1, -1));
  73. renata.Set<Vec2f>(0, 2, new Vec2f(-1, -1));
  74. renata.Set<Vec2f>(1, 0, new Vec2f(-1, -1));
  75. renata.Set<Vec2f>(1, 1, new Vec2f(8,8));
  76. renata.Set<Vec2f>(1, 2, new Vec2f(-1, -1));
  77. renata.Set<Vec2f>(2, 0, new Vec2f(-1, -1));
  78. renata.Set<Vec2f>(2, 1, new Vec2f(-1, -1));
  79. renata.Set<Vec2f>(2, 2, new Vec2f(-1, -1));
  80.  
  81.  
  82. Mat img= input;
  83. //Src Output
  84.  
  85. //Blur function. Naudojant nelyginius skaicius lengviau rast centrini pikseli
  86. //Cv2.Blur(img, img, new OpenCvSharp.Size(11, 11));
  87. // Cv2.MedianBlur(img, img, 7);
  88. Cv2.Filter2D(img, img, img.Depth(), renata);
  89. img.ConvertTo(img, MatType.CV_8UC3);
  90.  
  91. return img;
  92. }
  93.  
  94.  
  95. private void Run()
  96. {
  97. Thread.CurrentThread.IsBackground = true;
  98. VideoCapture videoCapture = new VideoCapture(1);
  99. while (true)
  100. {
  101.  
  102. image = new Mat();
  103. prcsImage = new Mat();
  104.  
  105. GC.Collect();
  106.  
  107. while (image.Width == 0)
  108. videoCapture.Read(image);
  109. Cv2.Flip(image, image, FlipMode.Y);
  110. pictureBox1.Image = image.ToBitmap();
  111. pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
  112. // pictureBox1.Refresh();
  113.  
  114. prcsImage = FilteredImage(image);
  115.  
  116. pictureBox2.Image = prcsImage.ToBitmap();
  117. pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
  118.  
  119. // pictureBox2.Refresh();
  120.  
  121. // videoCapture.Release();
  122. }
  123. }
  124.  
  125. private void btn_StartStream_Clicked_Click(object sender, EventArgs e)
  126. {
  127. camThread.Start();
  128. }
  129.  
  130. private void btn_StopStream_Clicked_Click(object sender, EventArgs e)
  131. {
  132. camThread.Abort();
  133. }
  134. }
  135.  
  136.  
  137.  
  138.  
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement