我正在编写一个opencv程序,更改图像颜色并使用用户指定的名称保存图像,该名称存储在某个变量中。我想用popen发送该文件进行打印。
#include <stdio.h>
#include "cv.h"
#include "highgui.h"
int main (int argc, char ** argv)
{
int p[3];
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 10;
p[2] = 0;
char name[10];
IplImage* in = cvLoadImage("imagenoise1.jpg",3);
IplImage* gray = cvCreateImage( cvSize(in->width, in->height),IPL_DEPTH_8U, 1 );
cvCvtColor( in, gray, CV_BGR2GRAY );
cvNamedWindow("in", CV_WINDOW_AUTOSIZE );
cvNamedWindow("gray", CV_WINDOW_AUTOSIZE );
cvShowImage("in",in);
cvShowImage("gray",gray);
printf("Con que nombre desea guardar la imagen en escala de grises ( no mas de 9 caracteres ):\n");
scanf("%s", name);
cvSaveImage( name, gray, p );
FILE *pipe = popen("lp name","w");
close(pipe);
cvWaitKey(0);
cvDestroyWindow( "in" );
cvDestroyWindow( "gray" );
cvReleaseImage( &in );
cvReleaseImage( &gray );
return 0;
}
所以我试图发送我之前提供的具体名称,但似乎没有任何效果,任何想法?,我想我错过了一些东西,因为发送一个不存在的文件。
答案 0 :(得分:0)
您尝试打开 imagenoise1.jpg ,这不是用户提供的,也许这就是您收到FILE_NOT_FOUND异常的原因。
IplImage* in = cvLoadImage("imagenoise1.jpg",3);
我认为您应该以这种方式更改您的代码:
IplImage* in = cvLoadImage(argv[1], 3);
您应该通过传递参数来运行/调试您的应用程序: test.exe imagenoise.jpg
答案 1 :(得分:0)
这段代码对我很怀疑:
scanf("%s", name);
cvSaveImage( name, gray, p );
FILE *pipe = popen("lp name","w");
看起来你需要这样做:
if (scanf("%s", name) == 1)
{
char cmd[256];
snprintf(cmd, sizeof(cmd), "lp %s", name);
system(cmd);
}
你既不向管道写任何内容也不从中读取任何内容,因此你不需要popen()
,system()
如果不是更好也应该工作。