У меня вопрос, который теоретически очень прост, но ... только теоретически :) Я хочу преобразовать изображение рамки Mat в серое. Я знаю, что я использую что-то вроде этого:OpenCV form application-convert Mat to Grayscale
cv :: cvtColor (frameA1, grayImageA1, CV_BGR2GRAY);
Но результат таков:
http://i57.tinypic.com/jfvodt.jpg
Я не знаю, почему у меня есть 3 изображения в одном после преобразования в оттенках серого. Это часть моего кода:
private: System::Void backgroundWorker1_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) {
BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender);
capture1.open(1);
while (camStatus1){
if (camBusy1) continue;
capture1.read(frameA1);
if (frameA1.empty()) continue;
cv::cvtColor(frameA1, grayImageA1, CV_BGR2GRAY);
worker->ReportProgress(1);
}
}
private: System::Void backgroundWorker1_ProgressChanged(System::Object^ sender, System::ComponentModel::ProgressChangedEventArgs^ e) {
if (!camBusy1){
camBusy1 = 1;
System::Drawing::Graphics^ graphics = imageBox1->CreateGraphics();
System::IntPtr ptr(frameA1.ptr());
System::Drawing::Bitmap^ b = gcnew System::Drawing::Bitmap(frameA1.cols, frameA1.rows, frameA1.step, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ptr);
System::Drawing::RectangleF rect(0, 0, imageBox1->Width, imageBox1->Height);
graphics->DrawImage(b, rect);
if (debugA){
System::Drawing::Graphics^ graphics = imageBox3->CreateGraphics();
System::IntPtr ptr(grayImageA1.ptr());
System::Drawing::Bitmap^ b = gcnew System::Drawing::Bitmap(grayImageA1.cols, grayImageA1.rows, grayImageA1.step, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ptr);
System::Drawing::RectangleF rect(0, 0, imageBox3->Width, imageBox3->Height);
graphics->DrawImage(b, rect);
}
camBusy1 = 0;
}
}
Любые идеи, почему это так работает? Я надеюсь, что вы можете помочь мне с этим теоретически простым вопросом :)
Да, это хорошо работает. Спасибо:) – MaSza