Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ture
443 / 336 / 127
Регистрация: 27.11.2014
Сообщений: 1,043
#1

Считать штрих-код при помощи библиотеки ZBar bar code reader - C++

19.04.2016, 12:01. Просмотров 936. Ответов 1
Метки нет (Все метки)

Есть библ "ZBar bar code reader". Есть желание извлечь штрих-код с картинки. Не знаю как завести стандартный пример с Magick++.h, т.к. не ведаю ка прикрутить еще и "Magick++.h". Поэтому использовал CImage. Как результат запутался в конец. Штрих-код не считывается.

У кого есть опыт работы с этой библой (zbar) под windows? Что я делаю не так? И как надо?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <atlimage.h>
#include <cassert>
#include "include\zbar.h"
 
 
#define GET_R(x) (WORD)(x >> 16)
#define GET_G(x) (WORD)(x >> 8)
#define GET_B(x) (WORD)(x)
 
 
void convert(CImage* pcImage) {
    assert(pcImage);
 
    int iWidth(pcImage->GetWidth());
    int iHeight(pcImage->GetHeight());
 
    if(iWidth && iHeight) {
        for(int i = 0; i < iWidth; i++) {
            for(int j = 0; j < iHeight; j++) {
                COLORREF clrOriginal(pcImage->GetPixel(i, j));
                WORD fR(GET_R(clrOriginal));
                WORD fG(GET_G(clrOriginal));
                WORD fB(GET_B(clrOriginal));
 
                WORD fWB = (0 + fR + fG + fB) / 3;
                pcImage->SetPixel(i, j, RGB(fWB, fWB, fWB));
            }
        }
    }
}
 
int main(int argc, char **argv) {
    
    // obtain image data
    CImage img;
    img.Load(LR"(C:\Users\etyurin\Documents\Visual Studio 2013\ProjectsCPP\zbar\Debug\barcode.tif)");
    convert(&img);
 
    int width = img.GetWidth();      //ширина
    int height = img.GetHeight();     //высота
    img.Save(LR"(C:\Users\etyurin\Documents\Visual Studio 2013\ProjectsCPP\zbar\Debug\rez.jpg)", Gdiplus::ImageFormatBMP);
    const void * raw = img.GetBits();
    
    // wrap image data
    zbar::Image image(width, height, "GRAY", raw, width * height);
    auto a=image.get_symbols();
 
    //поиск ШК
    zbar::ImageScanner scanner;
    scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
    int n = scanner.scan(image);
 
    //извлечение результата
    for(zbar::Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol) {
        std::cout << "decoded " << symbol->get_type_name() << " symbol "" << symbol->get_data() << '"' << std::endl;
    }
 
    //очистка
    image.set_data(NULL, 0);
    img.Destroy();
 
    std::system("pause");
    return(0);
}
Добавлено через 17 часов 56 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream>
#include "include\zbar.h"
#include "cv.h"
#include "highgui.h"
 
int main(int argc, char **argv) {
    
    cv::Mat img=cv::imread(R"(C:\Users\etyurin\Documents\Visual Studio 2013\ProjectsCPP\zbar\Debug\barcode.tif)", 0);
    cv::Mat img_out;
    cv::cvtColor(img, img_out, CV_GRAY2BGR);
    int width  = img.cols;     //ширина
    int height = img.rows;     //высота
 
    const void * raw = img.data;
    // wrap image data
    zbar::Image image(width, height, "Y800", raw, width * height);      
    
    //поиск ШК
    zbar::ImageScanner scanner;
    scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
    int n = scanner.scan(image);
 
    //извлечение результата
    for(zbar::Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol) {
        std::cout << "decoded " << symbol->get_type_name() << " symbol "" << symbol->get_data() << '"' << std::endl;
    }
 
    //очистка
    image.set_data(NULL, 0);    
 
    std::system("pause");
    return(0);
}
(я) - Сам спросил - сам ответил!
(я) - Форум ведь для того и нужен, чтоб с самим собой разговаривать, правда?
(я) - Да! Правда.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2016, 12:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Считать штрих-код при помощи библиотеки ZBar bar code reader (C++):

записать формулу при помощи библиотеки math.h - C++
Помогите пожалуйста , для примера записать формулу при помощи math.h желательно обе , можно даже просто строку как она записывается в с++

Как при помощи ф-ий read/write записать в файл, а потом считать с него - C++
Такой вопрос! Как при помощи ф-ий read/write записать в файл, а потом считать с него различные типы данных, как int,double, char, char. ...

Шифрование текста при помощи таблицы. Прокомментируйте код - C++
можете ли вы написать алгоритм этой программы и описать каждое действие, если не сложно, пожалуйста программа: Зашифровывает текст...

Библиотека ZBar Code Reader: сканирование и распознание QR-кода с вебкамеры ноутбука - C#
Здравствуйте, пишу дипломный проект , на C#, необходимо реализовать сканирование и распознание QR-кода с вебкамеры ноутбука. Что...

Штрих код в кодировке Code 128. Расчет контрольного числа - VBA
Есть стандарт способ создания штрих-кода. 'Строка штрих-кода в кодировке Code 128 Public Function Code_128(A As String) As String ...

Распознание QR Код Zbar.pas - Delphi
Добрый день. Кто нибудь подключал этот класс к проекту? Если подключали поделитесь опытом. Что у кого получилось из этого... Или как...

1
dipper
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 2
12.05.2016, 15:04 #2
Здравствуйте!
Я вот тоже пытаюсть прикрутить Zbar к проекту на последнем C++ билдере (Seattle). Но вот незадача - такой простенький GUI проект вроде компилится но не запускается (((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// ---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
 
#pragma hdrstop
 
#include "tstslib.h"
#include "zbar.h"
 
// using namespace zbar;
// using namespace std;
 
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "libzbar-0.lib"
#pragma resource "*.dfm"
TForm2 *Form2;
 
// ---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) {
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender) {
    zbar::ImageScanner scanner;
    //scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
    // obtain image data
    char file[256];
    int sz=sizeof file;
    ShowMessage("размер символьного массива file - "+IntToStr(sz));
}
// ---------------------------------------------------------------------------
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2016, 15:04
Привет! Вот еще темы с ответами:

Помогите найти шрифт штрих-код, который штрих-сканеры читают - Visual Basic
Здравствуйте, сорри знаю не по теме так как не нашел решил писать здесь. Мне надо печатать по принтеру штрих код. Я нашел не мало...

Парсинг Json при помощи библиотеки uLkJson - Delphi
доброго времени суток, подскажите как распарсить json. скачал библиотеку uLkJSON.pas но как с ней работать не знаю, есть вот такой текст ...

Как считать данные из сети при помощи c#? - C#
Люди! Помогите! В моей дипломной работе необходимо считать данные, которые приходят из сети на определенный IP и порт. как реализовать? вот...

Как при помощи Gradle добавлять библиотеки в проект? - Программирование Android
как при помощи Gradle добавлять библиотеки в проект?? А исходники как в проект добавить Android Studio??


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru