mirror of
https://github.com/opencv/opencv.git
synced 2026-07-30 15:53:03 +04:00
Merge pull request #21511 from dbudniko:dbudniko/gapi_media_format_gray
G-API media format gray
This commit is contained in:
@@ -44,6 +44,7 @@ std::ostream& operator<<(std::ostream& os, const cv::GFrameDesc &d) {
|
||||
switch (d.fmt) {
|
||||
case MediaFormat::BGR: os << "BGR"; break;
|
||||
case MediaFormat::NV12: os << "NV12"; break;
|
||||
case MediaFormat::GRAY: os << "GRAY"; break;
|
||||
default: GAPI_Assert(false && "Invalid media format");
|
||||
}
|
||||
os << ' ' << d.size << ']';
|
||||
|
||||
@@ -182,6 +182,10 @@ inline IE::Blob::Ptr wrapIE(const cv::MediaFrame::View& view,
|
||||
auto uv_plane = cv::Mat(desc.size / 2, CV_8UC2, view.ptr[1], view.stride[1]);
|
||||
return cv::gapi::ie::util::to_ie(y_plane, uv_plane);
|
||||
}
|
||||
case cv::MediaFormat::GRAY: {
|
||||
auto gray = cv::Mat(desc.size, CV_8UC1, view.ptr[0], view.stride[0]);
|
||||
return wrapIE(gray, cv::gapi::ie::TraitAs::IMAGE);
|
||||
}
|
||||
default:
|
||||
GAPI_Assert(false && "Unsupported media format for IE backend");
|
||||
}
|
||||
@@ -837,6 +841,9 @@ static void configureInputInfo(const IE::InputInfo::Ptr& ii, const cv::GMetaArg
|
||||
case cv::MediaFormat::BGR:
|
||||
// NB: Do nothing
|
||||
break;
|
||||
case cv::MediaFormat::GRAY:
|
||||
// NB: Do nothing
|
||||
break;
|
||||
default:
|
||||
GAPI_Assert(false && "Unsupported media format for IE backend");
|
||||
}
|
||||
|
||||
@@ -282,6 +282,23 @@ void GOCVBGR::Actor::extractRMat(const cv::MediaFrame& frame, cv::RMat& rmat)
|
||||
rmat = cv::make_rmat<cv::gimpl::RMatOnMat>(bgr);
|
||||
break;
|
||||
}
|
||||
case cv::MediaFormat::GRAY:
|
||||
{
|
||||
std::call_once(m_warnFlag,
|
||||
[]() {
|
||||
GAPI_LOG_WARNING(NULL, "\nOn-the-fly conversion from GRAY to BGR will happen.\n"
|
||||
"Conversion may cost a lot for images with high resolution.\n"
|
||||
"To retrieve cv::Mat from GRAY cv::MediaFrame for free, you may use "
|
||||
"cv::gapi::streaming::Y.\n");
|
||||
});
|
||||
cv::Mat bgr;
|
||||
auto view = frame.access(cv::MediaFrame::Access::R);
|
||||
cv::Mat gray(desc.size, CV_8UC1, view.ptr[0], view.stride[0]);
|
||||
cv::cvtColor(gray, bgr, cv::COLOR_GRAY2BGR);
|
||||
rmat = cv::make_rmat<cv::gimpl::RMatOnMat>(bgr);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
cv::util::throw_error(
|
||||
std::logic_error("Unsupported MediaFormat for cv::gapi::streaming::BGR"));
|
||||
@@ -339,6 +356,15 @@ void GOCVY::Actor::extractRMat(const cv::MediaFrame& frame, cv::RMat& rmat)
|
||||
});
|
||||
break;
|
||||
}
|
||||
case cv::MediaFormat::GRAY:
|
||||
{
|
||||
rmat = cv::make_rmat<cv::gimpl::RMatMediaFrameAdapter>(frame,
|
||||
[](const cv::GFrameDesc& d) { return cv::GMatDesc(CV_8U, 1, d.size); },
|
||||
[](const cv::GFrameDesc& d, const cv::MediaFrame::View& v) {
|
||||
return cv::Mat(d.size, CV_8UC1, v.ptr[0], v.stride[0]);
|
||||
});
|
||||
break;
|
||||
}
|
||||
default:
|
||||
cv::util::throw_error(
|
||||
std::logic_error("Unsupported MediaFormat for cv::gapi::streaming::Y"));
|
||||
@@ -408,6 +434,12 @@ void GOCVUV::Actor::extractRMat(const cv::MediaFrame& frame, cv::RMat& rmat)
|
||||
});
|
||||
break;
|
||||
}
|
||||
case cv::MediaFormat::GRAY:
|
||||
{
|
||||
cv::Mat uv(desc.size / 2, CV_8UC2, cv::Scalar::all(127));
|
||||
rmat = cv::make_rmat<cv::gimpl::RMatOnMat>(uv);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
cv::util::throw_error(
|
||||
std::logic_error("Unsupported MediaFormat for cv::gapi::streaming::UV"));
|
||||
|
||||
Reference in New Issue
Block a user