Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

openCV C++ подключение к VS 2010.

Posted on 7 ноября, 201321 мая, 2015 by admin

Здорова господа!!!

Рассмотрим библиотеку компьютерного зрения openCV. Мне нужны были функции масштабирования изображения формата jpg и jpeg, заюзал openCV. Вообще эта библиотека огромная и по ней есть целая книга, но мы рассмотрим только кое какие функции которые я использовал для масштабирования изображения.

[tip]OpenCV (англ. Open Source Computer Vision Library, библиотека компьютерного зрения с открытым исходным кодом) — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков. Может свободно использоваться в академических и коммерческих целях — распространяется в условиях лицензии BSD.[/tip]

1. Установка и подключение.

Скачиваем библиотеку последнюю версию отсюда: http://sourceforge.net/projects/opencvlibrary/

[tip]

Увы по ссылке выше в новой версии openCV уже нету либ для vs2010 поэтому скачиваем например эту версию где она есть ссылка

[/tip]

Дальше запускаем установщик программы и я точно не помню но все вроде по умолчанию оставляем и он просто устанавливается. Дальше

  1. Прописываем в visual studio 2010 путь к каталогу c:opencv\build\include\opencv\ и opencv/build/include/ это во вкладке: каталоги VC++ -> каталоги включения.
  2. Прописываем пути в visual studio 2010 путь к каталогу c:\opencv\build\x86\vc10\lib\ во вкладке VC++ -> каталоги библиотек.
  3. Дальше заходим на вкладку Компоновщик -> ввод -> каталоги исполняемых файлов, там прописываем подключаемые библиотеки: opencv_core246.lib, opencv_imgproc246.lib, opencv_highgui246.lib, opencv_ml246.lib, opencv_video246.lib. Это для релиза, для дебага нужно прописывать с буковкой d в конце имени.
  4. Ну и можно файлы из каталога c:\opencv\build\x86\vc10\bin имеется введу .dll все, покопировать в папку windows/System32, я так делал и повторюсь это не правильное решение, нужно их не копировать а подключать к проекту прописав пути к  этой папке  в настройках проекта, ну да ладно я скопировал, кто шарит, тот и так знает как подключить либу, это я уже для полнейших новичков объясняю как делать.

И дальше для того что бы использовать в проекте openCV нужно подключать соответствующие заголовочные файлы например:

1
2
3
//Подключение openCV
#include <cv.h>
#include <highgui.h>

2. Простейший пример использования.

Я попытаюсь привести пример с функцией которую я использую для масштабирования.

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/* $Id$ */
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
#include <string>
using std::string;
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <stdlib.h>
#include <sstream>
using std::stringstream;
#include <regex>
using std::regex_search;
using std::regex;
using std::smatch;
 
#include "gd.h"
#pragma comment(lib,"libgd.lib")
#include "curl/curl.h"
#pragma comment(lib,"curllib.lib")
//Подключение openCV
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
 
//создаем функцию для записи
static size_t my_fun(char* ptr,size_t size, size_t nmemb, string* str)
{
    if(str)
    {
        //размещает в блоке памяти размером size*nmemb данные из ptr (видимо)
        str->append(ptr,size*nmemb);
        return size*nmemb;
    }
    else
        return 0;//ошибка
}
 
bool resizeimg_jpeg_jpg(string& nameImg, string& content,double w=300,double h=300,double wn=20,double hn=20)
{
IplImage* image = 0;
IplImage* dest=0;
 
//1. извлекаем имя
smatch sm;
if(regex_search(nameImg,sm,regex(".+\\.jpeg.*",std::regex_constants::icase)))
{
ofstream ofs("temp.jpg",ofstream::out|ofstream::binary);
if(!ofs) { cerr <<"don't open file (function: 'resize_jpeg_jpg' 1"<<endl;exit(1); }
ofs <<content;
ofs.close();
image = cvLoadImage("temp.jpeg",1);
}
else if(regex_search(nameImg,sm,regex(".+\\.jpg.*",std::regex_constants::icase)))
{
ofstream ofs("temp.jpg",ofstream::out|ofstream::binary);
if(!ofs) { cerr <<"don't open file (function: 'resize_jpeg_jpg' 1"<<endl;exit(1); }
ofs <<content;
ofs.close();
image = cvLoadImage("temp.jpg",1);
}
else
{
cout <<"not find: jpeg|jpg"<<endl;
return false;
}
 
if(image==0)
return false;
 
double width=image->width; //ширина текущего изображения
double height=image->height; //высота текущего изображения
 
//если размеры меньше меньшего изображения, то возвращаем false (копирование не нужно)
if(width<wn||height<hn)
{
cvReleaseImage(&image);//разрушаем изображение и выходим из функции
return false;
}
 
//если размеры меньше максимального предела, то маштабирование не нужно, просто сохраняем изображение
if(width<w&&height<h)
{
//сохраняем изображение на диск
cvSaveImage(nameImg.c_str(),image);
cvReleaseImage(&image);
return true;
}
 
//Изображение больше, его нужно маштабировать(уменьшить)
//Вычисляем размеры уменьшеной копии, чтобы при масштабировании
//сохранились пропорции исходного изображения
double ratio=w/h; //коефициент сжатия
double src_ratio=width/height;//коэфициент маштабирования
if(ratio<src_ratio) h=w/src_ratio;
else w=h*src_ratio;
 
//создаем новое изображение
dest=cvCreateImage( cvSize(width, height), image->depth, image->nChannels );
if(dest==0) return false;
cvResize(image, dest, 1);
//сохранить новое изображение
cvSaveImage(nameImg.c_str(),dest); //сохраняем изображение на диск
cvReleaseImage(&image); //освобождаем ресурсы
cvReleaseImage(&dest);
return true;
}
 
int main()
{
    CURL* curl;
    CURLcode res;
 
    string content;
    curl=curl_easy_init();
    if(curl)
    {
//http://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Animal_diversity.png/265px-Animal_diversity.png
 
//http://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Animal_diversity.png/265px-Animal_diversity.png
        curl_easy_setopt(curl,CURLOPT_URL,"http://robocraft.ru/uploads/images/store/40/08/fc/1/d0f5eb_preview.jpg");
 
        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,my_fun);
        curl_easy_setopt(curl,CURLOPT_WRITEDATA,&content);
 
        res=curl_easy_perform(curl);
        if(res==CURLE_OK)cout <<"\nDone!"<<endl;
        else
            cout <<"curl_easy_perform failed: "<<curl_easy_strerror(res)<<endl;
 
        curl_easy_cleanup(curl);
    }
 
//в content
string nameImg="my_img1.jpg";
if(content.size()!=0)
resizeimg_jpeg_jpg(nameImg,content);
else if(content.size()==0)
cout <<"content.size()= "<<content.size()<<endl;
 
    return 0;
}

Эта функция масштабирует изображение, уменьшает его размеры, тут она принимает один единственный тип, то есть два jpeg и jpg, но это одн и тот же формат. Расписывать не хочу как она работает, там с кода все понятно. Лень просто.

Скажу что библиотека мощная, но там от нету жаль обработки формата gif, поэтому мне пришлось использовать гамно-библиотеку gdlib которая криво работает, а точнее половина функций не работает.

[youtube]http://www.youtube.com/watch?v=NsALnAuD09k[/youtube]

2 thoughts on “openCV C++ подключение к VS 2010.”

  1. leyitazaru:
    24 января, 2016 в 21:01

    Руководство написано на тяп-ляп, автору дизлайк!

    Ответить
    1. admin_kselax:
      17 марта, 2016 в 15:24

      Как написано извини, щас помоему новый openCV вышел. Я давно его не устанавливал, если надо было я по этому руководству без проблем устанавливал

      Ответить

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (29)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
  • ArnoldKig к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant