Zbar Image 支持的图片格式

在使用Zbar时,发现需要提供一个字符串类型的图片格式,比如Demo
中的”Y800”, 什么鬼?最后进过多番探索,找到了答案!

基础Demo(参考 http://blog.csdn.net/dcrmg/article/details/52108258):

#include "zbar.h"        
#include "cv.h"        
#include "highgui.h"        
#include         

using namespace std;        
using namespace zbar;  //添加zbar名称空间      
using namespace cv;        

int main(int argc,char*argv[])      
{        
    ImageScanner scanner;        
    scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);      
    Mat image = imread("code.jpg");    
      if(!image.data)  
        {  
           cout<<"请确认图片"<"pause");  
           return 0;  
        }  
    Mat imageGray;        
    cvtColor(image,imageGray,CV_RGB2GRAY);        
    int width = imageGray.cols;        
    int height = imageGray.rows;        
    uchar *raw = (uchar *)imageGray.data;           
    Image imageZbar(width, height, "Y800", raw, width * height);          
    scanner.scan(imageZbar); //扫描条码      
    Image::SymbolIterator symbol = imageZbar.symbol_begin();    
    if(imageZbar.symbol_begin()==imageZbar.symbol_end())    
    {    
        cout<<"查询条码失败,请检查图片!"<for(;symbol != imageZbar.symbol_end();++symbol)      
    {        
        cout<<"类型:"<get_type_name()<cout<<"条码:"<get_data()<"Source Image",image);          
    waitKey();      
    imageZbar.set_data(NULL,0);    
    return 0;    
}      

但是OpenCV是个大坑,需要我们想办法避过,参考代码

Image barcode = new Image(width, height, "RGB4");
barcode.setData(imgRGB888);
int result = scanner.scanImage(barcode.convert("Y800"));

如上,我们可以使用支持的格式构建Image,但是最大的坑来了,Zbar::Image支持哪些图片格式呢?还有Y800是个什么格式呢?

看下图,就有了答案:

Zbar Image 支持的图片格式_第1张图片

所以,Y800=GREY 实际上都是GRAY灰度图像。同时,Image支持常见的YUV以及RGB图像,具体参数需要参考图片中的fourcc()内部的文本。

哈哈哈,是不是很简单哪!

你可能感兴趣的:(C/C++)