テキストボックスからパスを読んでから、画像を開こうとしました
String^ P = path->Text;
IplImage* img = cvLoadImage(P);
次のエラーが表示されます
Error 1 error C2664: 'cvLoadImage' : cannot convert parameter 1 from 'System::String ^' to 'const char *'
char * に変換する方法を教えてください。
System::String ^ str = path->Text ;
char* str2 = (char*)Marshal::StringToHGlobalAnsi(str).ToPointer();
printf(str2);
次のヘッダー ファイルをインクルードします。
#using <mscorlib.dll>
using namespace System::Runtime::InteropServices;
Visual Studio C++ 10 以降の Char * から String ^ へ
私は小さな電卓を作っている間、これをテストしてOK....
// Variables :
char * number1 ;
double num1 ;
String ^ no1 ;
number1 = (char*)Marshal::StringToHGlobalAnsi(no1).ToPointer(); num1 = atof (number1) ;
遅すぎることはない。
ここに私が使用しているコードがあります
基本ファイルにヘッダーファイルを含めることを忘れないでください #include "saveImg.h" によってこれを呼び出します
保存 () ;
saveImg.h
int saveImg (){ // int argc , char* argv[] ) { // (int argc, char** argv) {
IplImage* img;
// if( argc == 2 && (img=cvLoadImage(argv[1], 1))!= 0) {
img=cvLoadImage("hello.jpg") ;
IplImage* gray = cvCreateImage( cvGetSize(img), 8, 1 );
IplImage* net1 = cvCreateImage( cvGetSize(img), 8, 3 );
CvMemStorage* storage = cvCreateMemStorage(0);
cvCvtColor( img, gray, CV_BGR2GRAY );
cvSmooth( gray, gray, CV_GAUSSIAN, 9, 9 ); // smooth it, otherwise a lot of false circles may be detected
CvSeq* circles = cvHoughCircles( gray, storage, CV_HOUGH_GRADIENT, 2, gray->height/4, 200, 100 );
int i;
for( i = 0; i < circles->total; i++ ) {
float* p = (float*)cvGetSeqElem( circles, i );
cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 );
cvCircle( img, cvPoint(cvRound(p[1]),cvRound(p[2])), cvRound(p[3]), CV_RGB(50,0,100), 3, 8, 0 );
// cvWaitKey(0);
}
cvNamedWindow( "Original", 1 );
cvShowImage( "Original", img );
cvWaitKey(0);
cvNamedWindow( "circles", 1 );
cvShowImage( "circles", gray );
cvWaitKey(0);
return 0;
}