Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: web-камера и массив Добавлено: 11.09.09 13:27  

Автор вопроса:  portC | Web-сайт: feshin.info

Ответить

  Ответы Всего ответов: 23  

Номер ответа: 16
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #16 Добавлено: 12.09.09 07:39
Сорри я немного запарился и перепутал. Переменная не колор, а Image.
Просто получи изображение с камеры, не на Picturebox, а сразу в переменную.

Ответить

Номер ответа: 17
Автор ответа:
 portC



Вопросов: 14
Ответов: 101
 Web-сайт: feshin.info
 Профиль | | #17
Добавлено: 12.09.09 08:41
Делал попытки, но почуму-то не получилось, не соображу, как использовать :-(
Можешь пример какой-нибудь показать?

Ответить

Номер ответа: 18
Автор ответа:
 portC



Вопросов: 14
Ответов: 101
 Web-сайт: feshin.info
 Профиль | | #18
Добавлено: 12.09.09 14:39
как правильно применить Dim im1 As Image ?

Ответить

Номер ответа: 19
Автор ответа:
 portC



Вопросов: 14
Ответов: 101
 Web-сайт: feshin.info
 Профиль | | #19
Добавлено: 12.09.09 14:49
Простейший код датчика движения:

  1. 'Îáíàðóæèì-êà äâèæåíèå
  2. 'Îáúÿâëåíèÿ äëÿ WEB-êàìåðû
  3. Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  4. Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long
  5. Private mCapHwnd As Long
  6. Private Const CONNECT As Long = 1034
  7. Private Const DISCONNECT As Long = 1035
  8. Private Const GET_FRAME As Long = 1084
  9. Private Const COPY As Long = 1054
  10. Dim P() As Long
  11. Dim POn() As Boolean
  12. Dim inten As Integer
  13. Dim i As Integer, j As Integer
  14. Dim Ri As Long, Wo As Long
  15. Dim RealRi As Long
  16. Dim c As Long, c2 As Long
  17. Dim R As Integer, G As Integer, B As Integer
  18. Dim R2 As Integer, G2 As Integer, B2 As Integer
  19. Dim Tppx As Single, Tppy As Single
  20. Dim Tolerance As Integer
  21. Dim RealMov As Integer
  22. Dim Counter As Integer
  23. Private Declare Function GetTickCount Lib "kernel32" () As Long
  24. Dim LastTime As Long
  25. Dim kartinka As PictureBox
  26. Dim im1 As Image
  27.  
  28. Private Sub Form_Load()
  29. Picture1.Width = 640 * Screen.TwipsPerPixelX
  30. Picture1.Height = 480 * Screen.TwipsPerPixelY
  31. Slider2.Value = 8 ' N = 15
  32. Slider1.Value = 20
  33. inten = Slider2.Value '15
  34. Tolerance = Slider1.Value '20
  35. Tppx = Screen.TwipsPerPixelX
  36. Tppy = Screen.TwipsPerPixelY
  37. ReDim POn(640 / inten, 480 / inten)
  38. ReDim P(640 / inten, 480 / inten)
  39. STARTCAM
  40. End Sub
  41.  
  42. Private Sub Slider1_Click()
  43. Tolerance = Slider1.Value '20
  44. End Sub
  45.  
  46. Private Sub Slider2_Click()
  47. inten = Slider2.Value '15
  48. End Sub
  49.  
  50. Private Sub Timer1_Timer()
  51.  
  52. SendMessage mCapHwnd, GET_FRAME, 0, 0
  53. SendMessage mCapHwnd, COPY, 0, 0
  54. Picture1.Picture = Clipboard.GetData
  55. 'kartinka = Clipboard.GetData ' нифига
  56. 'im1 = Me.hwnd ' нифига
  57.  
  58. 'im1.Picture = Clipboard.GetData ' нифига
  59. Clipboard.Clear
  60.  
  61. Ri = 0 'right
  62. Wo = 0 'wrong
  63.  
  64. LastTime = GetTickCount
  65.  
  66. For i = 0 To 640 / inten - 1 'y
  67.     For j = 0 To 480 / inten - 1 'x
  68.  
  69.     c = Picture1.Point(i * inten * Tppx, j * inten * Tppy)
  70.  
  71.     'àíàëèçèðóåì å¸, Red, Green, Blue
  72.         R = c Mod 256
  73.         G = (c \ 256) Mod 256
  74.         B = (c \ 256 \ 256) Mod 256
  75.         
  76.     c2 = P(i, j)
  77.  
  78.         R2 = c2 Mod 256
  79.         G2 = (c2 \ 256) Mod 256
  80.         B2 = (c2 \ 256 \ 256) Mod 256
  81.         
  82.     If Abs(R - R2) < Tolerance And Abs(G - G2) < Tolerance And Abs(B - B2) < Tolerance Then
  83.  
  84.     Ri = Ri + 1
  85.  
  86.     POn(i, j) = True
  87.     
  88.     Else
  89.  
  90.     Wo = Wo + 1
  91.  
  92.     P(i, j) = Picture1.Point(i * inten * Tppx, j * inten * Tppy)
  93.     Picture1.PSet (i * inten * Tppx, j * inten * Tppy), vbRed
  94.     POn(i, j) = False
  95.     End If
  96.     
  97.     Next j
  98.     
  99. Next i
  100.  
  101. RealRi = 0
  102.  
  103. For i = 1 To 640 / inten - 2
  104.     For j = 1 To 480 / inten - 2
  105.     If POn(i, j) = False Then
  106.  
  107.         If POn(i, j + 1) = False Then
  108.             If POn(i, j - 1) = False Then
  109.                 If POn(i + 1, j) = False Then
  110.                     If POn(i - 1, j) = False Then
  111.                     RealRi = RealRi + 1
  112.                     Picture1.PSet (i * inten * Tppx, j * inten * Tppy), vbGreen
  113.                     End If
  114.                 End If
  115.             End If
  116.         End If
  117.         
  118.     End If
  119.         
  120.         
  121.     Next j
  122. Next i
  123.  
  124. On Error Resume Next
  125. Label1.Caption = " &#228;&#226;&#232;&#230;&#229;&#237;&#232;&#233; " & Int(Wo / (Ri + Wo) * 100) & " % " & vbCrLf & " &#237;&#224;&#241;&#242;&#238;&#255;&#249;&#232;&#245; &#228;&#226;&#232;&#230;&#229;&#237;&#232;&#233;: " & RealRi & vbCrLf _
  126. & " &#231;&#224; &#226;&#240;&#229;&#236;&#255; : " & GetTickCount - LastTime
  127. End Sub
  128.  
  129. Sub STOPCAM()
  130. DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0
  131. Timer1.Enabled = False
  132. End Sub
  133.  
  134. Sub STARTCAM()
  135. mCapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 640, 480, Me.hwnd, 0)
  136. 'mCapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 640, 480, im1.hwnd, 0)' -нифига
  137. DoEvents
  138. SendMessage mCapHwnd, CONNECT, 0, 0
  139. Timer1.Enabled = True
  140. End Sub


Вот как сделать, чтобы этот код работал даже при свернутой (невидимой) форме (или хотябы без вывода изображения)?

Ответить

Номер ответа: 20
Автор ответа:
 portC



Вопросов: 14
Ответов: 101
 Web-сайт: feshin.info
 Профиль | | #20
Добавлено: 12.09.09 16:04
такой вариант может прокатить?
  1. Dim pic As StdPicture
  2. Set pic = Clipboard.GetData


только как получать что-то типа c = Picture1.Point(i.........
?

Ответить

Номер ответа: 21
Автор ответа:
 portC



Вопросов: 14
Ответов: 101
 Web-сайт: feshin.info
 Профиль | | #21
Добавлено: 12.09.09 22:27
ни у кого умных мыслей нет, как подправить код?

Ответить

Номер ответа: 22
Автор ответа:
 portC



Вопросов: 14
Ответов: 101
 Web-сайт: feshin.info
 Профиль | | #22
Добавлено: 13.09.09 00:28
знатоки VB 6.0 есть на форуме?

Ответить

Номер ответа: 23
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #23
Добавлено: 13.09.09 00:34
для начала стоит понять разницу между оконным элементом и данными. чтобы работать со свернутым окном хранить картинку нужно не в picture, а в переменной, которая хранит биты картинки. на апи это делается созданием графического контекста, битмапа, выбора битмапа в контекст и копированием в него изображения с функцией BitBlt. В васике я уже не помню, какой тип у картинки. Но как выше писали - возможно Image. Сталобыть читайкак его юзать. С Picture ничего путного не сделаешь - только костыли построишь.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам