【发布时间】:2015-12-07 13:03:01
【问题描述】:
我有一个 800x800 的图像,它被分解为 16 个 200x200 的块。
(可以看之前的帖子here)
这些块是:vector<Mat> subImages;
我想在它们上使用浮点指针,所以我这样做了:
float *pdata = (float*)( subImages[ idxSubImage ].data );
1) 现在,我希望能够再次获得相同的图像/块,从浮点数组到 Mat 数据。
int Idx = 0;
pdata = (float*)( subImages[ Idx ].data );
namedWindow( "Display window", WINDOW_AUTOSIZE );
for( int i = 0; i < OriginalImgSize.height - 4; i+= 200 )
{
for( int j = 0; j < OriginalImgSize.width - 4; j+= 200, Idx++ )
{
Mat mf( i,j, CV_32F, pdata + 200 );
imshow( "Display window", mf );
waitKey(0);
}
}
所以,问题是我收到了一个
OpenCV 错误:断言失败
在imshow中。
2) 如何重新组合所有块以获得原始 800x800 图像? 我试过类似的东西:
int Idx = 0;
pdata = (float*)( subImages[ Idx ].data );
Mat big( 800,800,CV_32F );
for( int i = 0; i < OriginalImgSize.height - 4; i+= 200 )
{
for( int j = 0; j < OriginalImgSize.width - 4; j+= 200, Idx++ )
{
Mat mf( i,j, CV_32F, pdata + 200 );
Rect roi(j,i,200,200);
mf.copyTo( big(roi) );
}
}
imwrite( "testing" , big );
这给了我:
OpenCV Error: Assertion failed (!fixedSize()) in release
在mf.copyTo( big(roi) );.
【问题讨论】:
-
到底想做什么?只需将浮点数据的 16 部分组合成一个垫子?
-
@Humam Helfawi:是的。只是在第一种情况下,我希望能够可视化每个块。