当前位置:首页 » 编程软件 » 摄影头编程

摄影头编程

发布时间: 2022-05-28 23:21:59

❶ 如何使用MATLAB进行USB2.0摄像头的编程

Matlab中的图像获取工具箱给我们提供了必要的函数,我们直接调用就可以了。在在这帖中我们主要就是简单的介绍如何使用该工具箱进行对USB2.0摄像头的编程

废话不多说,我们开始言归正传了。但是一定记住你必须安装了PC摄像头才可以进行下面的东西,如果说首次安装摄像头最好重启下PC,否则可能出现没法识别摄像头。

整个过程我们需要做如下几件事情:
1、查询USB2.0Camera 的具体参数(imaqhwinfo)
2、创建视频输入对象(videoinput)
3、图像预览和显示(preview、stoppreview、closepreview和image)
4、获取视频图像(getsnapshot)
5、图像获取设备的获取和设置(get和set)
6、关闭视频对象(delete)

在正式讲解之前,我想说明下几个个在图像获取工具箱中的术语:

图像获取设备:比如摄像头、扫描仪
图像获取适配器:主要的目的是通过驱动在Matlab和图像获取设备之间传递信息
ROI:region-of-interest 感兴趣区域

在说说几个常用的函数,我们这里只是说明它的作用,具体如何使用参考帮助系统
getselectedsource
imaqfind
isvalid
peekdata
getdata
imaqmontage
给我们一个摄像头我们必须知道他的相关参数,才可能进行我们的编程下。当然我们可以查询商家手册,但是那个累不累人呀。

Matlab的图像获取工具箱为我提供了imaqhwinfo(),来获取PC上以安装的图像获取硬件信息

❷ 在编程中怎样调用摄像头

在编程里面想要调用了摄像头的话,这个你可以给他编辑一个程序,然后就打开摄像头就可以了。

❸ 嵌入式摄像头编程要涉及到哪些知识

linux驱动和移植

❹ c# 摄像头编程

建议你使用AVICap class API(avicap32.dll)来进行摄像头编程,你用的是.net,所以请使用平台Invoke(P/Invoke)来使用该API.
给你点相关代码:
1.
using System.Runtime.InteropServices;
2.
const int WM_CAP_START = 1024;
const int WS_CHILD = 1073741824;
const int WS_VISIBLE = 268435456;
const int WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10);
const int WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11);
const int WM_CAP_EDIT_COPY = (WM_CAP_START + 30);
const int WM_CAP_SEQUENCE = (WM_CAP_START + 62);
const int WM_CAP_FILE_SAVEAS = (WM_CAP_START + 23);
const int WM_CAP_SET_SCALE = (WM_CAP_START + 53);
const int WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52);
const int WM_CAP_SET_PREVIEW = (WM_CAP_START + 50);
const int SWP_NOMOVE = 2;
const int SWP_NOSIZE = 1;
const int SWP_NOZORDER = 4;
const int HWND_BOTTOM = 1;

3.
//---capGetDriverDescription函数取得捕获驱动的版本描述信息 [System.Runtime.InteropServices.DllImport("avicap32.dll")]
static extern bool capGetDriverDescriptionA(
short wDriverIndex, string lpszName,
int cbName, string lpszVer, int cbVer);
//---capCreateCaptureWindow函数建立一个捕获窗口
[System.Runtime.InteropServices.DllImport("avicap32.dll")]
static extern int capCreateCaptureWindowA(
string lpszWindowName, int dwStyle, int x, int y,
int nWidth, short nHeight, int hWnd, int nID);
//---SendMessageA
[System.Runtime.InteropServices.DllImport(
"user32", EntryPoint = "SendMessageA")]
static extern int SendMessage(
int hwnd, int Msg, int wParam,
[MarshalAs(UnmanagedType.AsAny)] object lParam);
//---SetWindowPos
[System.Runtime.InteropServices.DllImport(
"user32", EntryPoint = "SetWindowPos")]
static extern int SetWindowPos(
int hwnd, int hWndInsertAfter, int x, int y,
int cx, int cy, int wFlags);
//--DestroyWindow
[System.Runtime.InteropServices.DllImport("user32")]
static extern bool DestroyWindow(int hndw);

4.
//---定义窗口句柄---
private int hWnd;

5.
private void Form1_Load(object sender, EventArgs e)
{
if (serialPort.IsOpen)
{
serialPort.Close();
}
try
{
//---配置串口参数
serialPort.PortName = "COM3";
serialPort.BaudRate = 9600;
serialPort.Parity = System.IO.Ports.Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = System.IO.Ports.StopBits.One;
serialPort.Handshake = System.IO.Ports.Handshake.None;
serialPort.DataReceived +=
new
System.IO.Ports.(
DataReceived);
//打开串口
serialPort.Open();
serialPort.DiscardInBuffer();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
//视频显示
PreviewVideo(PictureBox1);
}

6.
private void PreviewVideo(PictureBox pbCtrl)
{
hWnd = capCreateCaptureWindowA(
"0", WS_VISIBLE | WS_CHILD, 0, 0, 0, 0,
pbCtrl.Handle.ToInt32(), 0);
if (SendMessage(hWnd, WM_CAP_DRIVER_CONNECT, 0, 0) != 0)
{
//---set the preview scale---
SendMessage(hWnd, WM_CAP_SET_SCALE, 1, 0);
//---set the preview rate (ms)---
SendMessage(hWnd, WM_CAP_SET_PREVIEWRATE, 30, 0);
//---start previewing the image---
SendMessage(hWnd, WM_CAP_SET_PREVIEW, 1, 0);
//---resize window to fit in PictureBox control---
SetWindowPos(hWnd, HWND_BOTTOM, 0, 0,
pbCtrl.Width, pbCtrl.Height,
SWP_NOMOVE | SWP_NOZORDER);
}
else
{
//错误连接
DestroyWindow(hWnd);
}
}

❺ linux下怎么样进行摄像头编程

在linux下所有设备都是文件。所以对摄像头的操作其实就是对文件的操作。USB摄像头的设备文件就是在/dev目录下的video0(假如只有一个摄像头)。在linux下操作摄像头就是使用v4l2对摄像头进行的操作,操作步骤如下

  • 打开设备文件。

  • int fd=open(”/dev/video0″,O_RDWR);

  • 2. 取得设备的capability,看看设备具有什么功能,比如是否具有输入,或者音频输入输出等。VIDIOC_QUERYCAP,struct v4l2_capability

  • v4l2_std_id std;

  • do {

  • ret= ioctl(fd, VIDIOC_QUERYSTD, std);

  • } while (ret == -1 errno == EAGAIN);

  • switch (std) {

  • case V4L2_STD_NTSC:

  • //……

  • case V4L2_STD_PAL:

  • //……

  • }

  • 3. 选择输入,一个设备可以有多个输入。VIDIOC_S_INPUT,struct v4l2_input(可不要)

  • 4. 设置的制式和帧格式,制式包括PAL,NTSC,帧的格式个包括宽度和高度等。

  • VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format

  • struct v4l2_format fmt;

  • memset ( fmt, 0, sizeof(fmt) );

  • fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

  • fmt.fmt.pix.width = 320;

  • fmt.fmt.pix.height = 240;

  • fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG;

  • if (ioctl(fd, VIDIOC_S_FMT, fmt) < 0)

  • {

  • printf("set format failed ");

  • //return 0;

  • }

  • 5. 向驱动申请帧缓冲,一般不超过5个。struct v4l2_requestbuffers

  • struct v4l2_requestbuffers req;

  • memset(req, 0, sizeof (req));

  • req.count = 4;

  • req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

  • req.memory = V4L2_MEMORY_MMAP;

  • if (ioctl(fd,VIDIOC_REQBUFS,req) == -1)

  • {

  • perror("VIDIOC_REQBUFS error ");

  • //return -1;

  • }

  • 6.申请物理内存

  • 将申请到的帧缓冲映射到用户空间,这样就可以直接操作采集到的帧了,而不必去复制。将申请到的帧缓冲全部入队列,以便存放采集到的数据.VIDIOC_QBUF,struct v4l2_buffer

  • VideoBuffer* buffers = calloc( req.count, sizeof(VideoBuffer) );

  • printf("sizeof(VideoBuffer) is %d ",sizeof(VideoBuffer));

  • struct v4l2_buffer buf;

  • for (numBufs = 0; numBufs < req.count; numBufs++)

  • {

  • memset( buf, 0, sizeof(buf) );

  • buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

  • buf.memory = V4L2_MEMORY_MMAP;

  • buf.index = numBufs;

  • if (ioctl(fd, VIDIOC_QUERYBUF, buf) < 0)

  • {

  • printf("VIDIOC_QUERYBUF error ");

  • //return -1;

  • }

  • printf("buf len is %d ",sizeof(buf));

  • //内存映射

  • buffers[numBufs].length = buf.length;

  • buffers[numBufs].offset = (size_t) buf.m.offset;

  • buffers[numBufs].start = mmap (NULL, buf.length,PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset);

  • printf("buffers.length = %d,buffers.offset = %d ,buffers.start[0] = %d ",buffers[numBufs].length,buffers[numBufs].offset,buffers[numBufs].start[0]);

  • printf("buf2 len is %d ",sizeof(buffers[numBufs].start));

  • if (buffers[numBufs].start == MAP_FAILED)

  • {

  • perror("buffers error ");

  • //return -1;

  • }

  • if (ioctl (fd, VIDIOC_QBUF, buf) < 0)

  • {

  • printf("VIDIOC_QBUF error ");

  • //return -1;

  • }

  • }

  • 7. 开始的采集。

  • enum v4l2_buf_type type;

  • type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

  • if (ioctl (fd, VIDIOC_STREAMON, type) < 0)

  • {

  • printf("VIDIOC_STREAMON error ");

  • // return -1;

  • }

  • 8. 出队列以取得已采集数据的帧缓冲,取得原始采集数据。VIDIOC_DQBUF, 将缓冲重新入队列尾,这样可以循环采集。VIDIOC_QBUF

  • if (ioctl(fd, VIDIOC_DQBUF, buf) < 0)

  • {

  • perror("VIDIOC_DQBUF failed. ");

  • //return -1;

  • }

  • buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

  • buf.memory = V4L2_MEMORY_MMAP;

  • unsigned char *ptcur = buffers[numBufs].start;

  • DEBUG("buf.bytesused = %d ",buf.bytesused);

  • int i1;

  • for(i1=0; i1<buf.bytesused; i1++)

  • {

  • if((buffers[numBufs].start[i1] == 0xFF) (buffers[numBufs].start[i1+1] == 0xC4))

  • {

  • DEBUG("huffman table finded! buf.bytesused = %d FFC4 = %d ",buf.bytesused,i1);

  • break;

  • }

  • }

  • if(i1 == buf.bytesused)printf("huffman table don't exist! ");

  • int i;

  • for(i=0; i<buf.bytesused; i++)

  • {

  • if((buffers[numBufs].start[i] == 0xFF) (buffers[numBufs].start[i+1] == 0xD8)) break;

  • ptcur++;

  • }

  • DEBUG("i=%d,FF=%02x,D8=%02x ",i,buffers[numBufs].start[i],buffers[numBufs].start[i+1]);

  • int imagesize =buf.bytesused - i;

  • DEBUG("buf.bytesused = %d ",buf.bytesused);

  • DEBUG ("imagesize = %d ",imagesize);

  • 9. 停止的采集。VIDIOC_STREAMOFF

  • 10. 关闭设备。close(fd);

❻ 如何编程使网络摄像头监测有东西在移动

这应该说图像检测和处理的内容。很多图书把它归为人工智能的范畴。

我有一个思路供你参考。
如果摄像头是固定的话,那它拍摄的背景是相同的。
摄像机就是连续快速拍摄的照相机。

摄像头以每秒若干张照片的速度拍摄。

这些照片显示的应该是连续的画面。
而检测画面是否在运动,就是比较前后两张图片是否存在差异。

以上是基本思路,程序可以直接从摄像头上获取图像信息,也可从视频文件中获取图像信息。

不过在实际实现上还是有改进的地方,
比如是检测前后两张图片的话,检测的敏感程度太高了。
比如,摄像头前飞来一只蚊子,它也能察觉到,而你也许只想看到是否有人或车辆在动。或者背景上有一些植物在动,而这不是你需要。
可以对这个规则进行适当修改。
比如检测前后连续若干张图片,如果图片的差异度不大的话,算做没有差异。
以及两张图片之间的差异度如何计算都可以适当规定。

❼ linux下怎样进行摄像头编程

在linux下所有设备都是文件。所以对摄像头的操作其实就是对文件的操作。USB摄像头的设备文件就是在/dev目录下的video0(假如只有一个摄像头)。在linux下操作摄像头就是使用v4l2对摄像头进行的操作,操作步骤如下

  1. 打开设备文件。

  2. int fd=open(”/dev/video0″,O_RDWR);

  3. 2. 取得设备的capability,看看设备具有什么功能,比如是否具有输入,或者音频输入输出等。VIDIOC_QUERYCAP,struct v4l2_capability

  4. v4l2_std_id std;

  5. do {

  6. ret= ioctl(fd, VIDIOC_QUERYSTD, std);

  7. } while (ret == -1 errno == EAGAIN);

  8. switch (std) {

  9. case V4L2_STD_NTSC:

  10. //……

  11. case V4L2_STD_PAL:

  12. //……

  13. }

  14. 3. 选择输入,一个设备可以有多个输入。VIDIOC_S_INPUT,struct v4l2_input(可不要)

  15. 4. 设置的制式和帧格式,制式包括PAL,NTSC,帧的格式个包括宽度和高度等。

  16. VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format

  17. struct v4l2_format fmt;

  18. memset ( fmt, 0, sizeof(fmt) );

  19. fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

  20. fmt.fmt.pix.width = 320;

  21. fmt.fmt.pix.height = 240;

  22. fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG;

  23. if (ioctl(fd, VIDIOC_S_FMT, fmt) < 0)

  24. {

  25. printf("set format failed ");

  26. //return 0;

  27. }

  28. 5. 向驱动申请帧缓冲,一般不超过5个。struct v4l2_requestbuffers

  29. struct v4l2_requestbuffers req;

  30. memset(req, 0, sizeof (req));

  31. req.count = 4;

  32. req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

  33. req.memory = V4L2_MEMORY_MMAP;

  34. if (ioctl(fd,VIDIOC_REQBUFS,req) == -1)

  35. {

  36. perror("VIDIOC_REQBUFS error ");

  37. //return -1;

  38. }

  39. 6.申请物理内存

  40. 将申请到的帧缓冲映射到用户空间,这样就可以直接操作采集到的帧了,而不必去复制。将申请到的帧缓冲全部入队列,以便存放采集到的数据.VIDIOC_QBUF,struct v4l2_buffer

  41. VideoBuffer* buffers = calloc( req.count, sizeof(VideoBuffer) );

  42. printf("sizeof(VideoBuffer) is %d ",sizeof(VideoBuffer));

  43. struct v4l2_buffer buf;

  44. for (numBufs = 0; numBufs < req.count; numBufs++)

  45. {

  46. memset( buf, 0, sizeof(buf) );

  47. buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

  48. buf.memory = V4L2_MEMORY_MMAP;

  49. buf.index = numBufs;

  50. if (ioctl(fd, VIDIOC_QUERYBUF, buf) < 0)

  51. {

  52. printf("VIDIOC_QUERYBUF error ");

  53. //return -1;

  54. }

  55. printf("buf len is %d ",sizeof(buf));

  56. //内存映射

  57. buffers[numBufs].length = buf.length;

  58. buffers[numBufs].offset = (size_t) buf.m.offset;

  59. buffers[numBufs].start = mmap (NULL, buf.length,PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset);

  60. printf("buffers.length = %d,buffers.offset = %d ,buffers.start[0] = %d ",buffers[numBufs].length,buffers[numBufs].offset,buffers[numBufs].start[0]);

  61. printf("buf2 len is %d ",sizeof(buffers[numBufs].start));

  62. if (buffers[numBufs].start == MAP_FAILED)

  63. {

  64. perror("buffers error ");

  65. //return -1;

  66. }

  67. if (ioctl (fd, VIDIOC_QBUF, buf) < 0)

  68. {

  69. printf("VIDIOC_QBUF error ");

  70. //return -1;

  71. }

  72. }

  73. 7. 开始的采集。

  74. enum v4l2_buf_type type;

  75. type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

  76. if (ioctl (fd, VIDIOC_STREAMON, type) < 0)

  77. {

  78. printf("VIDIOC_STREAMON error ");

  79. // return -1;

  80. }

  81. 8. 出队列以取得已采集数据的帧缓冲,取得原始采集数据。VIDIOC_DQBUF, 将缓冲重新入队列尾,这样可以循环采集。VIDIOC_QBUF

  82. if (ioctl(fd, VIDIOC_DQBUF, buf) < 0)

  83. {

  84. perror("VIDIOC_DQBUF failed. ");

  85. //return -1;

  86. }

  87. buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

  88. buf.memory = V4L2_MEMORY_MMAP;

  89. unsigned char *ptcur = buffers[numBufs].start;

  90. DEBUG("buf.bytesused = %d ",buf.bytesused);

  91. int i1;

  92. for(i1=0; i1<buf.bytesused; i1++)

  93. {

  94. if((buffers[numBufs].start[i1] == 0xFF) (buffers[numBufs].start[i1+1] == 0xC4))

  95. {

  96. DEBUG("huffman table finded! buf.bytesused = %d FFC4 = %d ",buf.bytesused,i1);

  97. break;

  98. }

  99. }

  100. if(i1 == buf.bytesused)printf("huffman table don't exist! ");

  101. int i;

  102. for(i=0; i<buf.bytesused; i++)

  103. {

  104. if((buffers[numBufs].start[i] == 0xFF) (buffers[numBufs].start[i+1] == 0xD8)) break;

  105. ptcur++;

  106. }

  107. DEBUG("i=%d,FF=%02x,D8=%02x ",i,buffers[numBufs].start[i],buffers[numBufs].start[i+1]);

  108. int imagesize =buf.bytesused - i;

  109. DEBUG("buf.bytesused = %d ",buf.bytesused);

  110. DEBUG ("imagesize = %d ",imagesize);

  111. 9. 停止的采集。VIDIOC_STREAMOFF

  112. 10. 关闭设备。close(fd);

❽ VB.NET 摄像头编程求助

这是6.0的,.net的做些改动就成!因为我没装摄像头,就没改! 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 Private Const WS_CHILD = &H40000000 Private Const WS_VISIBLE = &H10000000 Private Const WM_USER = &H400 Private Const WM_CAP_START = &H400 Private Const WM_CAP_EDIT_COPY = (WM_CAP_START + 30) Private Const WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10) Private Const WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52) Private Const WM_CAP_SET_OVERLAY = (WM_CAP_START + 51) Private Const WM_CAP_SET_PREVIEW = (WM_CAP_START + 50) Private Const WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11) 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 Private Preview_Handle As Long Public Function CreateCaptureWindow( _ hWndParent As Long, _ Optional x As Long = 0, _ Optional y As Long = 0, _ Optional nWidth As Long = 320, _ Optional nHeight As Long = 240, _ Optional nCameraID As Long = 0) As Long Preview_Handle = capCreateCaptureWindow("Video", _ WS_CHILD + WS_VISIBLE, x, y, _ nWidth, nHeight, hWndParent, 1) SendMessage Preview_Handle, WM_CAP_DRIVER_CONNECT, nCameraID, 0 SendMessage Preview_Handle, WM_CAP_SET_PREVIEWRATE, 30, 0 SendMessage Preview_Handle, WM_CAP_SET_OVERLAY, 1, 0 SendMessage Preview_Handle, WM_CAP_SET_PREVIEW, 1, 0 CreateCaptureWindow = Preview_Handle End Function Public Function CapturePicture(nCaptureHandle As Long) As StdPicture Clipboard.Clear SendMessage nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0 Set CapturePicture = Clipboard.GetData End Function Public Sub Disconnect(nCaptureHandle As Long, _ Optional nCameraID = 0) SendMessage nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, _ nCameraID, 0 End Sub 4在form上添加一个PictureBox,一个按钮,Caption设为 Save Pic Dim Video_Handle As Long Private Sub Form_Load() Video_Handle = CreateCaptureWindow(PicCapture.hwnd) End Sub Private Sub Command1_Click() Dim x As StdPicture Set x = CapturePicture(Video_Handle) SavePicture x, "c:\a.bmp" End Sub Private Sub Form_Unload(Cancel As Integer) Disconnect Video_Handle End Sub 追问: 可不可以帮忙写为VB.NET的程序..?我自己运行后显示 未声明 PicCapture 追问: nCameraID = 0 这里在VB.NET下也用不了Clipboard.GetData 在VB.NET里也要跟参数的..我自己试用VB可以的..希望你能帮忙写一个VB.NET的..因为就算没有摄像头picturebox也会显示黑色的 回答: 你这程序是工程用的!请加多点分!我给你改 追问: 可不可以加我QQ先344568960 因为我积分不多...或许我可以给Q币你怎么的~可以吗? 追问: 已经补充了积分了~希望能帮忙改成VB.NET的吧~谢谢~ 回答: 建一个picturebox 和 button Imports System.Runtime.InteropServices Public Class Form1 Const WM_CAP_START = &H400S Const WS_CHILD = &H40000000 Const WS_VISIBLE = &H10000000 Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10 Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11 Const WM_CAP_EDIT_COPY = WM_CAP_START + 30 Const WM_CAP_SEQUENCE = WM_CAP_START + 62 Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23 Const WM_CAP_SET_SCALE = WM_CAP_START + 53 Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52 Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50 Const SWP_NOMOVE = &H2S Const SWP_NOSIZE = 1 Const SWP_NOZORDER = &H4S Const HWND_BOTTOM = 1 Dim hWnd As Integer Declare Function capGetDriverDescriptionA Lib "avicap32.dll" _ (ByVal wDriverIndex As Short, _ ByVal lpszName As String, ByVal cbName As Integer, _ ByVal lpszVer As String, _ ByVal cbVer As Integer) As Boolean Declare Function capCreateCaptureWindowA Lib "avicap32.dll" _ (ByVal lpszWindowName As String, ByVal dwStyle As Integer, _ ByVal x As Integer, ByVal y As Integer, _ ByVal nWidth As Integer, _ ByVal nHeight As Short, ByVal hWnd As Integer, _ ByVal nID As Integer) As Integer Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Integer, ByVal Msg As Integer, _ ByVal wParam As Integer, _ <Runtime.InteropServices.MarshalAs(UnmanagedType.AsAny)> ByVal lParam As Object) _ As Integer Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" _ (ByVal hwnd As Integer, _ ByVal hWndInsertAfter As Integer, ByVal x As Integer, _ ByVal y As Integer, _ ByVal cx As Integer, ByVal cy As Integer, _ ByVal wFlags As Integer) As Integer Declare Function DestroyWindow Lib "user32" _ (ByVal hndw As Integer) As Boolean Private Sub PreviewVideo(ByVal pbCtrl As PictureBox) hWnd = capCreateCaptureWindowA(0, _ WS_VISIBLE Or WS_CHILD, 0, 0, 0, _ 0, pbCtrl.Handle.ToInt32, 0) If SendMessage( _ hWnd, WM_CAP_DRIVER_CONNECT, _ 0, 0) Then SendMessage(hWnd, WM_CAP_SET_SCALE, True, 0) SendMessage(hWnd, WM_CAP_SET_PREVIEWRATE, 30, 0) SendMessage(hWnd, WM_CAP_SET_PREVIEW, True, 0) SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, _ pbCtrl.Width, pbCtrl.Height, _ SWP_NOMOVE Or SWP_NOZORDER) Else DestroyWindow(hWnd) End If End Sub Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load PreviewVideo(PictureBox1) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim data As IDataObject Dim bmap As Image SendMessage(hWnd, WM_CAP_EDIT_COPY, 0, 0) data = Clipboard.GetDataObject() If data Is Nothing Then Exit Sub If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then bmap = CType(data.GetData(GetType( _ System.Drawing.Bitmap)), Image) bmap.Save("d:\a.bmp", System.Drawing.Imaging.ImageFormat.Bmp) MsgBox("完成") End If End Sub End Class

c语言进行摄像头编程需要学些什么

directshow/avicapture/opencv几种都可以实现,好好学这几方面吧 ,不对,弄清楚其中一种先。但是,基本语法知识就有点...C知识先搞清楚。

❿ 如何实现在电脑上编程实现对摄像头的控制

你说的是对对方的摄像头进行控制吗?
这个常人做不到的 因为你要建立一个连接,也就相当于你是服务器,你还得打开一个通往他的端口,还要越过对方的防火墙和杀毒软件

你如果没有C++基础可以用易语言弄,不过太麻烦了

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:649
制作脚本网站 发布:2025-10-20 08:17:34 浏览:940
python中的init方法 发布:2025-10-20 08:17:33 浏览:635
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:824
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:734
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1070
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:302
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:164
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:855
python股票数据获取 发布:2025-10-20 07:39:44 浏览:766