0

我正在编写一个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;
}

所以我试图发送我之前给出的特定名称,但似乎没有任何效果,知道吗?,我想我错过了一些东西,因为发送了一个不存在的文件。

4

2 回答 2

0

您尝试打开用户未提供的imagenoise1.jpg,这可能就是您收到 FILE_NOT_FOUND 异常的原因。

IplImage* in = cvLoadImage("imagenoise1.jpg",3);

我认为您应该以这种方式更改代码:

IplImage* in = cvLoadImage(argv[1], 3);

你应该通过传递参数来运行/调试你的应用程序:test.exe imagenoise.jpg

于 2014-02-09T01:09:30.897 回答
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()应该可以正常工作,如果不是更好的话。

于 2014-02-09T01:48:01.747 回答