Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
10 / 10 / 0
Регистрация: 02.01.2019
Сообщений: 38
1

Как вывести картинку из OpenCV?

13.01.2019, 23:58. Показов 3057. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет. Помогите идеей или кодом. Смысл в чем. Я написал программу в vs2017 release x64 c библиотеками OpenCV 3,4. Отлично работает. НО не проканало. Надо оформление. Там есть касяк. В OpenCV только ползунки, и кнопки, мышь, так по мелочи.. А вот оформлять там нечем и не нужно было. Думал, что б не трехеться, накидаю в с++ в сpp WindowsForms.. что б быстрее было. И тут ввстрял.. Не могу прикрутить картинку с фрамами (обработаную с вебки) к оболочке Form.h. И нет особо описания нормального. Точнее нагоглил. Но или на C# и под хрюшу.. Там каких то годов. И хрен фурычит, или там кустами описывают, что хоть глаз выкали. начинаешь повторять, не понимаю.. Или я что то проелюбил, в манулах сети.. Нужно или каким то макаром загружать срузу в некое созданое окно frame c другого файла проект .cpp от openCV. Буду пользоваться промежуточным файлом "*.txt" передачи переменных. Не лучший вариант. Зато думать не надо думать, как сохранять настройки текущей сесии.
Или неким макаром впихнуть openCV в .срр и .h файл проекта Forms, что куда логичней. И тут столкнулся с элемерным. Как загнать картинку с одного в другое. Единственно, что пришло в голову. Это надо создать окно рисунка (вроде как, приделать через таймер обновление его. ) А в OpenCV незнаю как перегнать в для окна переменые.
Я накидал скилет. Может кто подскажет.. Если сталкивались с таким.

MyForm.h
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
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#pragma once
 
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <opencv2/core.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\opencv.hpp>
 
#include <stdlib.h>
#include <stdio.h>
#include <C:\Users\korot\source\repos\Project1  С++\Project1\opencv\sources\include\opencv\cv.h>
#include <C:\Users\korot\source\repos\Project1  С++\Project1\opencv\sources\include\opencv\cxcore.h>
 
 
 
namespace автоматизацияпромышленности 
{
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    using namespace cv;
    using namespace std;
 
    /// <summary>
    /// Сводка для MyForm
    /// </summary>
    public ref class MyForm : public System::Windows::Forms::Form
  {
    public:
        MyForm(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
 
        }
 
    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~MyForm()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
    private: System::Windows::Forms::PictureBox^  pictureBox1;
 
    protected:
 
    protected:
 
    private:
        /// <summary>
        /// Обязательная переменная конструктора.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Требуемый метод для поддержки конструктора — не изменяйте 
        /// содержимое этого метода с помощью редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
 
 
 
 
 
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->BeginInit();
            this->SuspendLayout();
    
            this->button1->AllowDrop = true;
            this->button1->AutoEllipsis = true;
            this->button1->Cursor = System::Windows::Forms::Cursors::AppStarting;
            this->button1->Location = System::Drawing::Point(12, 12);
            this->button1->MaximumSize = System::Drawing::Size(200, 200);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(200, 32);
            this->button1->TabIndex = 0;
            this->button1->Text = L"Отк. нов. окно. с шабл. 1";
            this->button1->UseCompatibleTextRendering = true;
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);
            this->pictureBox1->Location = System::Drawing::Point(553, 27);
            this->pictureBox1->Name = L"pictureBox1";
            this->pictureBox1->Size = System::Drawing::Size(255, 183);
            
            // И вот тут я застрял. 
                        
            // так можно загнать картинку через конвертор IplImage*:
            IplImage* image = 0;  
            image = cvLoadImage("шаблон1.jpg", 1);
            
            // А так это хрень загоняет картинку в System :: String ^ filename
            
 
            pictureBox1->Image = Image::FromFile("шаблон1.jpg");
            this->pictureBox1->Image;
 
            // И как это дело преобразовать в обход сохранения, естественно?!?
            
            
 
 
 
            this->pictureBox1->SizeMode = System::Windows::Forms::PictureBoxSizeMode::StretchImage;
            
            this->pictureBox1->TabIndex = 1;
            this->pictureBox1->TabStop = false;
            // 
            // MyForm
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(844, 532);
            this->Controls->Add(this->pictureBox1);
            this->Controls->Add(this->button1);
            this->Name = L"MyForm";
            this->Text = L"MyForm";
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->EndInit();
            this->ResumeLayout(false);
 
        }
#pragma endregion
    
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    {
        
        //проверка кода. По нажатию кнопки откроется окно и включиться камера.
        
    
        VideoCapture cam(0);
        if (cam.isOpened() == false) {}
        while (true)
        {   Mat img;
            cam >> img;
            if (waitKey(30) >= 0) {};
 
            IplImage* imag = cvCloneImage(&(IplImage)img);
            cvNamedWindow("с камеры", CV_WINDOW_AUTOSIZE);
            cvShowImage("с камеры", imag);
            cvReleaseImage(&imag);
            //  IplImage* imag - это постоянно обновляющаеся картинка с камеры
             //и закрыть окно пока не выйдет
            
        }
    }
  };
}
B MyForm.cpp
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
#include "MyForm.h" 
 
 
 
 
using namespace System;
using namespace System::Windows::Forms;
    
[STAThread]
void Main(array<String^>^args)
 
{
 
    // или тут делать переобазование.. 
 
 
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);
    автоматизацияпромышленности::MyForm form;
    Application::Run(%form);
 
 
 
 
}
Вроде как народ лепит через Bitmap. Я хз как это пишется.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2019, 23:58
Ответы с готовыми решениями:

OpenCV 3.2.0 не открывает картинку imshow
Взял стандартный пример из официальной документации OpenCV для 3.2.0 Features2D + Homography to...

OpenCV инвертировать черно-белую картинку
Здравствуйте. Есть черно-белая картинка (именно черно-белая, а не оттенки серого), нужно её...

Выделить линии и разрезать картинку по ним. (Opencv)
Здравствуйте, наставьте на путь истинный, подскажите алгоритм. На данной картинке нужно выделить...

Opencv-gabor filter не сохраняет результирующую картинку
Здравствуйте. Мне необходим фильтр Габора. Нашел реализацию в инете, но не получается сохранить...

5
278 / 186 / 75
Регистрация: 12.04.2017
Сообщений: 1,088
Записей в блоге: 2
14.01.2019, 00:42 2
Цитата Сообщение от Demon1234567890 Посмотреть сообщение
Или неким макаром впихнуть openCV в .срр и .h файл проекта Forms, что куда логичней. И тут столкнулся с элемерным. Как загнать картинку с одного в другое
Можно использовать обертку над Open CV - Emgu CV
Emgu CV is a cross platform .Net wrapper to the OpenCV image processing library.
http://www.emgu.com/wiki/index.php/Main_Page

http://www.emgu.com/wiki/index... in_C%2B%2B

Цитата Сообщение от Demon1234567890 Посмотреть сообщение
Не могу прикрутить картинку с фрамами (обработаную с вебки) к оболочке Form.h.
https://github.com/emgucv/emgu... /CPlusPlus
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
14.01.2019, 10:32 3
1. Лучше использовать OpenCV для С++ (к примеру cv::Mat вместо IplImage*).
2. Нагуглил за вас
C++
1
2
3
Bitmap^ Engine::ConvertMatToBitmap(cv::Mat matToConvert) {
    return gcnew Bitmap(matToConvert.cols, matToConvert.rows, 4*matToConvert.rows, System::Drawing::Imaging::PixelFormat::Format24bppRgb, IntPtr(matToConvert.data));
}
1
278 / 186 / 75
Регистрация: 12.04.2017
Сообщений: 1,088
Записей в блоге: 2
14.01.2019, 11:12 4
Цитата Сообщение от Demon1234567890 Посмотреть сообщение
Как загнать картинку с одного в другое.
У класса EmguCV Image есть метод
C++
1
2
public:
Bitmap^ ToBitmap()
Конвертирует EmguCV Image в System:: Drawing::Bitmap
Отсюда взято
http://www.emgu.com/wiki/files... Index.html
0
10 / 10 / 0
Регистрация: 02.01.2019
Сообщений: 38
14.01.2019, 22:08  [ТС] 5
ругается на
Цитата Сообщение от lArtl Посмотреть сообщение
Engine
Добавлено через 9 минут
Цитата Сообщение от RunningMan Посмотреть сообщение
У класса EmguCV Image есть метод
Нервно курю. Пока без результатно..
и ругается на ifstream fout, ofstream fout, imwrite,..
Я там в другой форме рожал прожку
C++
1
2
3
4
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)  main(int argc, const char** argv){}
там все просто, как грабли.. Думал тупо файл подцеплю, или тут закину с большего. и к кнопкам переменные подобью... А тут, мля, темный лес, черт ногу сломит переменные отдльно вынесины. На все мне привыкшие команды ругается страшно... Не ну все для людей так и надо.. Но насорога не слеплю за пару вечеров.. А в классических приложениях windows редактор так и не доделали. Лучше сразу пристрелите, кнопки вырисовывать без конструктора... Чето я начал поглядывать обратно на Qt креатор какой.. И не такое уж гофно.. И быстренько все.. нахраом.. Опять вечер в пустую убил
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
15.01.2019, 07:32 6
Цитата Сообщение от Demon1234567890 Посмотреть сообщение
ругается на
Убери Engine)
0
15.01.2019, 07:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2019, 07:32
Помогаю со студенческими работами здесь

Как вывести картинку?
я хочу вывести картинку как мне это сделать???

Как вывести картинку из БД?
Есть картинка в базе хранится в поле BLOB. Как мне вывести эту картинку на сайт?

Как вывести картинку?
Помогите.Создаю текстовою игру но хочу рядом с текстом выводить картинку.Как это сделать?

Как вывести картинку GIF
Подскажите пожалуйста как показать каритнку формата GIF используя специальные классы каких-либо...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru