在處理圖像自動亮度調(diào)節(jié)時,需要判斷圖像是否過亮或者過暗,從而根據(jù)圖像給出的結(jié)果,進行調(diào)節(jié)。方法如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-613745.html
int isLight(cv::Mat& src)
{
?? ?cv::Mat gray;
?? ?//轉(zhuǎn)為灰度圖片
?? ?cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);
?? ?float sum = 0;
?? ?float avg = 0;
?? ?cv::Scalar scalar;
?? ?int ls[256];
?? ?int size = gray.rows * gray.cols;
?? ?for (int i = 0; i < 256; i++)
?? ??? ?ls[i] = 0;
?? ?for (int i = 0; i < gray.rows; i++)
?? ?{
?? ??? ?for (int j = 0; j < gray.cols; j++)
?? ??? ?{
?? ??? ??? ?//scalar = cvGet2D(gray, i, j);
?? ??? ??? ?scalar = gray.at<uchar>(i, j);
?? ??? ??? ?sum += (scalar.val[0] - 128);
?? ??? ??? ?int x = (int)scalar.val[0];
?? ??? ??? ?ls[x]++;
?? ??? ?}
?? ?}
?? ?avg = sum / size;
?? ?float total = 0;
?? ?float mean = 0;
?? ?for (int i = 0; i < 256; i++)
?? ?{
?? ??? ?total += abs(float(i - 128) - avg) * ls[i];
?? ?}
?? ?mean = total / size;
?? ?float cast = abs(avg / mean);
?? ?std::cout << ?"亮度異常值:" << cast << std::endl;
?? ?if (cast > 1)
?? ?{
?? ??? ?if (avg > 0)
?? ??? ?{
?? ??? ??? ?std::cout << "亮度異常 過亮" << avg << std::endl;
?? ??? ??? ?return 1;
?? ??? ?}
?? ??? ?else {
?? ??? ??? ?std::cout << "亮度異常 過暗" << avg << std::endl;
?? ??? ??? ?return -1;
?? ??? ?}
?? ?}
?? ?else
?? ?{
?? ??? ?std::cout << "normal" << std::endl;
?? ??? ?return 0;
?? ?}
}
文章來源:http://www.zghlxwxcb.cn/news/detail-613745.html
到了這里,關(guān)于利用OpenCV判斷圖像是否過亮或過暗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!