質問編集履歴

2

別のやり方を試した際の問題点

2019/11/27 06:47

投稿

hsgru3
hsgru3

スコア22

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- ソースコードの一部となりますがボタンをクリックするとファイル選択ダイアログが開かれ選択した画像をpicturebox1に表示し、画像処理したものをpicturebox2に表示させようとしています。
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

2019/11/27 06:47

投稿

hsgru3
hsgru3

スコア22

test CHANGED
File without changes
test CHANGED
File without changes