【发布时间】:2017-03-19 07:51:08
【问题描述】:
我有一个图像,假设是 800x800 像素,我想定义 200x200 像素的区域并能够处理它们。
我不知道如何进行这项工作。 我试过了:
int N = 4;
Size smallSize( graySize.width / N ,graySize.height / N );
Mat region_frame;
vector<Mat> smallImages;
namedWindow( "Display window", WINDOW_AUTOSIZE );
for( int i = 0; i < graySize.height - N; i+= smallSize.height )
{
for( int j = 0; j < graySize.width - N; j+= smallSize.width )
{
Rect rect = Rect( j,i, smallSize.width, smallSize.height );
region_frame = grayImg( rect );
smallImages.push_back( region_frame.clone() );
imshow( "Display window", region_frame );
waitKey(0);
}
}
但我没有收到任何输出(没有创建任何窗口!)。 如果我对 grayImg 使用 imshow ,它会正确显示。
另外,因为我想处理这些块/区域/子图像,有没有办法给它们分配标签? 例如 region[0] ( 它将包含像素 0-199 x 0-199 , region[1] 200-399 x 200-399 等等。
*********编辑****************
所以,不显示图像的问题是我上面的代码:
if( grayImg.isContinuous() )
{
graySize.width *= graySize.height;
graySize.height = 1;
}
去掉那个,图片就可以正常显示了!
现在,仍然是处理 smallImages 以便能够进行计算。
例如,我可以做一个 Mat 对象
float *theData = (float*)grayImg.data;
但是对于像 smallImages 这样的vector<Mat>?
如何使用指针?
【问题讨论】:
-
发生了什么?我刚刚测试了它,它正在工作......
-
@Berriel:它只是不产生任何输出。它的行为就像没有调用 imshow。但是,如果我将 imshow 用于原始图像(循环外),它会正确显示。
-
@Miki:我看到了这篇文章并且已经使用了“正确”的代码,即使这篇文章没有被接受的答案。另外,我在最后一段中问了一些其他问题。
-
所以你想要一个每个区域都有相同标签的“标签”图像?
-
我只是复制粘贴你的代码,添加了
imread,它正在工作......关于你的最后一段:smallImages将是一个区域向量,所以你可以使用@ 987654327@随你所愿