如何从Axis网络摄像机访问或获取BMP中的当前图像?

时间:2015-12-07 15:46:23

标签: c# ip-camera

我遇到了从IP摄像头访问帧的问题。 我正在使用Axis M1013相机,我想执行各种操作,如颜色检测和物体检测。 我可以调用相机,但我不知道如何获取当前图像,因此我可以对其执行其他操作。

这是我的代码:

private void Play_btn_Click(object sender, EventArgs e)
{
    //viewIPCamera();
    AMC1.MediaURL = "169.254.103.123//axis-cgi/mjpg/video.cgi";;
    AMC1.MediaUsername = "root";
    AMC1.MediaPassword = "password";
    AMC1.MediaType = "mjpeg";
    AMC1.Play();

那么如何从网络摄像机获取当前图像呢?

2 个答案:

答案 0 :(得分:0)

Axis相机使用ONVIF标准,也许可以尝试这样的。

using Ozeki.Media.IPCamera;
using Ozeki.Media.MediaHandlers.Video;
using Ozeki.Media.Video.Controls;
using Ozeki.Media.MediaHandlers;


public partial class Snapshot {

    private SnapshotHandler _snapshotHandler;

    private void CreateSnapShot(string path) {
                var date = DateTime.Now.Year + "y-" + DateTime.Now.Month + "m-" + DateTime.Now.Day + "d-" +
                           DateTime.Now.Hour + "h-" + DateTime.Now.Minute + "m-" + DateTime.Now.Second + "s";
                string currentpath;
                if (String.IsNullOrEmpty(path))
                    currentpath = date + ".jpg";
                else
                    currentpath = path + "\\" + date + ".jpg";

                var snapShotImage = _snapshotHandler.TakeSnapshot().ToImage();
                snapShotImage.Save(currentpath, System.Drawing.Imaging.ImageFormat.Jpeg);
    }

}

此链接可以帮助您入门:

How to create ONVIF Ip camera snapshot

答案 1 :(得分:0)

如果您确实需要使用Axis SDK,这可能有所帮助。

object myBuffer;
int myBufferSize;
AMC1.GetCurrentImage(0, out myBuffer, out myBufferSize) ;
byte[] returningBytes = new byte[myBufferSize];
//Add JPEG header to new byte array
returningBytes[0] =  Convert.ToByte(255);
returningBytes[1] = Convert.ToByte(216);
returningBytes[2] = Convert.ToByte(255);
returningBytes[3] = Convert.ToByte(224);
returningBytes[4] = Convert.ToByte(0);
returningBytes[5] = Convert.ToByte(16);
returningBytes[6] = Convert.ToByte(74);
returningBytes[7] = Convert.ToByte(70);
returningBytes[8] = Convert.ToByte(73);
returningBytes[9] = Convert.ToByte(70);
//Copy actual image into new byte array
Buffer.BlockCopy(myBuffer as Array, 10, returningBytes, 10, myBufferSize - 10);

returnsBytes现在是一个正确的字节数组,可以保存到数据库或转换为内存流来填充图片框。请注意,我确实使用了jpeg,而不是OP请求的bmp。