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 に答える