質問編集履歴
2
別のやり方を試した際の問題点
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
|
17
|
+
下記のコードはボタンをクリックするとファイル選択ダイアログが開かれ選択した画像をpicturebox1に表示し、画像処理したものをpicturebox2に表示させようとしています。
|
18
18
|
|
19
19
|
|
20
20
|
|
@@ -77,3 +77,105 @@
|
|
77
77
|
Visual studio community 2015
|
78
78
|
|
79
79
|
OpenCV 3.4.0
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
###追記
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
下記のコードはBitmapをMatに変換するのではなくファイル選択で選んだパス(dlg->FileName)をSystem::String ^型からstd::stringに変換してimreadで読み込ませています。そのあとimreadで読み込んだ画像を画像処理してからpicureBox2に表示させようとしています。
|
88
|
+
|
89
|
+
ここで問題なのですがimshowで表示させた時点で上下左右反転しdrawImage関数でpictureBox2に表示させると画像が崩れてしまいます。
|
90
|
+
|
91
|
+
申し訳ございませんがヒントや参考になりそうなサイト等でも教えていただけると幸いです。
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
```C++
|
96
|
+
|
97
|
+
private: System::Void button_Click(System::Object^ sender, System::EventArgs^ e) {
|
98
|
+
|
99
|
+
//ファイルを開くダイアログの作成
|
100
|
+
|
101
|
+
OpenFileDialog^ dlg = gcnew OpenFileDialog;
|
102
|
+
|
103
|
+
//ファイルフィルタ
|
104
|
+
|
105
|
+
dlg->Filter = "画像ファイル(*.bmp,*.jpg,*.png,*.tif,*.ico)|*.bmp;*.jpg;*.png;*.tif;*.ico";
|
106
|
+
|
107
|
+
//ダイアログの表示 (Cancelボタンがクリックされた場合は何もしない)
|
108
|
+
|
109
|
+
if (dlg->ShowDialog() == System::Windows::Forms::DialogResult::Cancel) return;
|
110
|
+
|
111
|
+
//ビットマップファイルから、元画像Bitmapを作成
|
112
|
+
|
113
|
+
Bitmap^ bmp1 = gcnew Bitmap(dlg->FileName);
|
114
|
+
|
115
|
+
//picturebox1に表示
|
116
|
+
|
117
|
+
pictureBox1->Image = bmp1;
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
//ファイル選択ダイアログで選択したファイルのパス(dlg->FileName(System::String ^型))をstd::stringに変換
|
122
|
+
|
123
|
+
string imgfl = msclr::interop::marshal_as<std::string>(dlg->FileName);
|
124
|
+
|
125
|
+
//imreadでよみこむ
|
126
|
+
|
127
|
+
Mat img = imread(imgfl);
|
128
|
+
|
129
|
+
--------------------------
|
130
|
+
|
131
|
+
OpenCVを用いて画像処理
|
132
|
+
|
133
|
+
--------------------------
|
134
|
+
|
135
|
+
//picturebox2に画像処理したものを表示
|
136
|
+
|
137
|
+
drawImage(pictureBox2, img);
|
138
|
+
|
139
|
+
}
|
140
|
+
|
141
|
+
//描画
|
142
|
+
|
143
|
+
private: System::Void drawImage(PictureBox^ pic, Mat mat) {
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
if ((pic->Image == nullptr) || (pic->Width != mat.cols)
|
148
|
+
|
149
|
+
|| (pic->Height != mat.rows)) {
|
150
|
+
|
151
|
+
pic->Width = mat.cols;
|
152
|
+
|
153
|
+
pic->Height = mat.rows;
|
154
|
+
|
155
|
+
Bitmap^ bmpPicBox = gcnew Bitmap(pic->Width, pic->Height);
|
156
|
+
|
157
|
+
pic->Image = bmpPicBox;
|
158
|
+
|
159
|
+
}
|
160
|
+
|
161
|
+
Graphics^g = Graphics::FromImage(pic->Image);
|
162
|
+
|
163
|
+
Bitmap^ bmp = gcnew Bitmap(mat.cols, mat.rows, mat.step,
|
164
|
+
|
165
|
+
System::Drawing::Imaging::PixelFormat::Format32bppRgb, IntPtr(mat.data));
|
166
|
+
|
167
|
+
g->DrawImage(bmp, 0, 0, mat.cols, mat.rows);
|
168
|
+
|
169
|
+
pic->Refresh();
|
170
|
+
|
171
|
+
delete g;
|
172
|
+
|
173
|
+
}
|
174
|
+
|
175
|
+
```
|
176
|
+
|
177
|
+
左からBitmapで読み込んでpictureBox1に出力したもの、Matで読み込んでpictureBox2に表示させたもの、Matで読み込んでimshowで表示させたものです。
|
178
|
+
|
179
|
+
まずimreadで読み込まれた際になぜか上下左右が反転してしまい、pictureBox2に出力しようとすると画像が崩れてしまいます。
|
180
|
+
|
181
|
+
![![イメージ説明](817b1fab7166295c18dd813cf3cd7685.png)](f71d220f54b286edb664607c017fb12a.png)
|
1
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|