【发布时间】:2015-03-02 23:56:37
【问题描述】:
我有一个理论上很容易的问题,但......只是理论上:) 我想将 Mat 帧图像转换为灰度。我知道我应该使用这样的东西:
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;
}
}
任何想法为什么它会这样工作?我希望你能帮助我解决这个理论上很简单的问题:)
【问题讨论】:
标签: c++ forms opencv visual-studio-2013 grayscale