'using System;
'using System.Collections.Generic;
'using System.Drawing;
'using System.Windows.Forms;
'using Emgu.CV;
'using Emgu.CV.Structure;
'using Emgu.CV.CvEnum;
'using System.IO;
'using System.Diagnostics;
'using System.Runtime.InteropServices;
'namespace FaceStat
'{
'class Form1 : Form
{
// public static extern void AsmSearchDll(out int nlmarks, out int lmarks, string imgname, byte imgdata, int width, int height, int is_color, string conf_file0, string conf_file1);
[DllImport(@"../data/stasm_dll.dll")]
public static extern void AsmSearchDll(
out int pnlandmarks, // out: number of landmarks, 0 if can't get landmark
out int[] landmarks, // out: the landmarks, caller must allocate
[MarshalAs(UnmanagedType.LPStr)]string image_name, // in: used in internal error messages, if necessary
[MarshalAs(UnmanagedType.LPStr)]string image_data, // in: image data, 3 bytes per pixel if is_color
int width, // in: the width of the image
int height, // in: the height of the image
int is_color, // in: 1 if RGB image, 0 if grayscale
[MarshalAs(UnmanagedType.LPStr)]string conf_file0, // in: 1st config filename, NULL for default
[MarshalAs(UnmanagedType.LPStr)]string conf_file1 // in: 2nd config filename, NULL for default, "" for none
);
static void Main(string[] args)
{
string image_name = "../data/Chupul.jpg";
IplImage img = cvlib.cvLoadImage(image_name, cvlib.CV_LOAD_IMAGE_COLOR);
if (img == null)
{
Console.Write("Error: Can't open the image. {0}\n", image_name);
return;
}
int nlandmarks;
int[] landmarks = new int[500]; // space for x,y coords of up to 250 landmarks
AsmSearchDll(out nlandmarks, out landmarks, image_name, img.imageData, img.width, img.height, 1, null, null);
if (nlandmarks == 0)
{
Console.Write("\nError: Cannot locate landmmarks in {0}\n", image_name);
return;
}
int[] p = landmarks;
cvlib.cvPolyLine(img, p, nlandmarks, 1, true, cvlib.CV_RGB(255,0,0));
cvlib.cvShowImage("Asm example", img);
cvlib.cvWaitKey(0);
cvlib.cvDestroyWindow("Asm example");
cvlib.cvReleaseImage(img);
return;
}
}
'}
エラーが6個あります
'FaceStat.Form1.AsmSearchDll(out int, out int[], string, string, int, int, int, string, string)' に最も一致するオーバーロードされたメソッドには無効な引数が含まれています
引数 4 は 'System.IntPtr' から 'string' に変換できません
'cvlib.cvPolyLine(CvArr, CvPoint[], int[], int, int, CvScalar)' に最もよく一致するオーバーロードされたメソッドには、いくつかの無効な引数があります
引数 2 は 'int[]' から 'CvPoint[]' に変換できません
引数 3 は 'int' から 'int[]' に変換できません
引数 5: 'bool' から 'int' に変換できません
ありがとう
C++ dll
void AsmSearchDll (
int *pnlandmarks, // out: number of landmarks, 0 if can't get landmarks
int landmarks[], // out: the landmarks, caller must allocate
const char image_name[], // in: used in internal error messages, if necessary
const char image_data[], // in: image data, 3 bytes per pixel if is_color
const int width, // in: the width of the image
const int height, // in: the height of the image
const int is_color, // in: 1 if RGB image, 0 if grayscale
const char conf_file0[], // in: 1st config filename, NULL for default
const char conf_file1[] // in: 2nd config filename, NULL for default, "" if none
)