我有一个嵌入式设备。在此,它从远程源产生一些输出图像,这些图像是每1秒间隔从实时流中截取的屏幕截图。我需要每隔10分钟将第一张图片与下一张10张图片进行比较,以检测流是否被冻结。
此设备具有c和c ++访问权限且内存非常有限,我将获得的是jpeg图像。我可以使用libjpeg
解压缩jpeg图像
我很想使用角点检测和筛选,因为如果图像旋转会导致误报。我也不能opencv
当我在解压缩后与memcmp()
进行比较时,我发现它们是不同的。我尝试使用
cinfo.out_color_space = JCS_GRAYSCALE;
如何将1张图像与第1张图像进行比较。我只需要比较部分,实现管理内存。
我无法比较原始图像,因为它会包含一些附加的timstamp, 如果图像高度为517像素,我只需要比较前400列 所以我的代码是
// The row_stride is the total number of bytes it takes to store an
// entire scanline (row).
row_stride = width * pixel_size;
while (cinfo.output_scanline < cinfo.output_height)
{
unsigned char *buffer_array[1];
buffer_array[0] = bmp_buffer + \
(cinfo.output_scanline) * row_stride;
jpeg_read_scanlines(&cinfo, buffer_array, 1);
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
checking_buff = (unsigned char *)malloc((size_t)(row_stride*400));
然后与第一个样本进行memcmp()
比较