0

こんにちは、

を実行OpenCVしてDLL、アプリケーションで使用しようとしていLabVIEWます。

で画像を正しく取得LVし、バイト配列をに渡しましたDLL

ループしてテキストファイルにすべてのピクセルの値を出力し、それらをLVの出力と一致させることができるので、LVが最初に2列を追加することを除いて、すべてのピクセルが正しい位置にあることがわかります。最初の2つの値は高さと幅用に予約されており、残りは任意の数値です。しかし、これが行うべきことは、画像の左側にストリークを生成することだけです。

次に、次の行を使用して画像を変換して表示します。

a[0]a[1]...などはチャネルです。

出力画像は、ピクセルが15〜20ピクセルの間隔で等間隔​​に配置され、黒いピクセルで囲まれた、非常に水平方向に引き伸ばされた画像として出力されます。スクリーンショットを添付しました

_declspec (dllexport)  double  imageProcess(int **a, int &x, int &y, int &cor,int &cog,int &cob,int &cow, int th, int hth)
{

    y = a[0][0];
    x = a[0][1];


    Mat image(y, x, CV_8U, a[0]);


    namedWindow( "Display window", CV_WINDOW_NORMAL );  // Create a window for display.
    imshow( "Display window", image );                 // Show our image inside it.

    return (0);
}

さらに、同じ効果でこのコードを使用してみました:

IplImage* cv_image = cvCreateImageHeader(cvSize(x,y), IPL_DEPTH_8U, 1);
cvSetData(cv_image, a[0], cv_image->widthStep);
Mat image = Mat(cv_image, false);

誰かが私の画像作成中にこれが起こっている理由を説明するのを手伝ってもらえますか?

注:残念ながら、LVからの元の画像/キャプチャを提供することはできませんが、そのようには見えず、すべてをグレースケールで処理していると言えます。

出力画像:

出力

4

2 に答える 2

0

画像をucharに変換するか、CV_8UをCV_32Sに置き換えてint画像を使用するだけで、次のことができます。

int offset = 0;
int scale = 0;
cv::Mat image8U;
image.convertTo(image8U, CV_8UC1, scale, offset );
于 2013-02-09T19:52:04.217 に答える
0

あなたの入力( a )はintの行列ですが、opencvはそこにucharを望んでいます。

あなたが現在行っている方法では、各int(aから)は4つの連続したバイトに広がります(まさに、その写真に表示されているものです)また、入力データの最初の1/4のみを使用しています

おそらく、ピクセル ポインターを cv::Mat にフィードし、a[0] をループし、各ピクセルを uchar にキャストし、それを opencv-pixel に割り当てるだけではうまくいかないでしょう。

于 2013-02-09T09:16:40.033 に答える