2
char* filename1="1.bmp";  
IplImage* greyLeftImg= cvLoadImage(filename1,0);
char* filename2="2.bmp";
IplImage* greyRightImg= cvLoadImage(filename2,0); 

IplImage* greyLeftImg32=cvCreateImage(cvSize(width,height),32,greyLeftImg->nChannels);//IPL_DEPTH_32F 
IplImage* greyRightImg32=cvCreateImage(cvSize(width,height),32,greyRightImg->nChannels);

常に失敗し、「Assertion failed (src.size == dst.size && dst.type() == CV_8UC(src.channels())) in unknown function」

多くの方法を検索しましたが、どれもうまくいかないようですか?

4

2 に答える 2

2

opencv のグレースケール 8 ビットまたは 16 ビット uint 画像を 32 ビット浮動小数点型に変換する簡単な手順は次のとおりです...

IplImage* img = cvLoadImage( "E:\\Work_DataBase\\earth.jpg",0);
IplImage* out = cvCreateImage( cvGetSize(img), IPL_DEPTH_32F, img->nChannels);

double min,max;

cvMinMaxLoc(img,&min,&max);

// Remember values of the floating point image are in the range of 0 to 1, which u 
// can't visualize by cvShowImage().......
cvCvtScale(img,out,1/ max,0);

それが簡単な方法であることを願っています...

于 2013-01-03T18:53:54.323 に答える
1

これは、anyIplImageを 32 ビット float に変換する簡単な関数です。

IplImage* convert_to_float32(IplImage* img)
{
    IplImage* img32f = cvCreateImage(cvGetSize(img),IPL_DEPTH_32F,img->nChannels);

    for(int i=0; i<img->height; i++)
    {
        for(int j=0; j<img->width; j++)
        {
            cvSet2D(img32f,i,j,cvGet2D(img,i,j));
        }
    }
    return img32f;
}

重要な考慮事項は、OpenCV の浮動小数点画像の場合、ピクセル値が 0.0 から 1.0 の画像のみを視覚化できることです。浮動小数点画像を視覚化するには、値を 0.0 から 1.0 にスケーリングする必要があります。

これを行う方法の例を次に示します。

IplImage* img8u = cvLoadImage(filename1,0);

IplImage* img32f = convert_to_float32(img8u);

cvShowImage("float image",img32f); //Image will not be shown correctly
cvWaitKey(0);

cvScale(img32f, img32f, 1.0/255.0);

cvShowImage("float image normalized",img32f); //Image will be shown correctly now 
cvWaitKey(0);
于 2013-01-03T15:42:29.873 に答える