تصاویر باینری دارای مقادیر 0 و 255 هستند و اگر dynamic range آنها را محاسبه کنید میشه 2 و اگر dynamice rnage بزرگتر از 2 باشه میشه grayscale
برای تشخیص در OpenCV به صورت زیر:
cv::Mat mask;
cv::inRange(img,Scalar::all(1),Scalar::all(254),mask);
if (countNonZero(mask))
cout << "grayscale"
else cout << "binary";