我遇到了从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();
那么如何从网络摄像机获取当前图像呢?
答案 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);
}
}
此链接可以帮助您入门:
答案 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。