OpenCV图像增强(一)——多尺度视网膜增强
生活随笔
收集整理的這篇文章主要介紹了
OpenCV图像增强(一)——多尺度视网膜增强
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前言
1.在處理攝像頭時,或者在圖像中物體輪廓提取時,常常會碰到一些背景偏暗的圖像,為了更好的得到效果,那么圖像增強會是一個不錯的選擇。
2.我這里使用的庫OpenCV版本是3.30,關(guān)于opencv學習,有興趣的看我之前發(fā)的博客,可以加之前博客后面給的興趣群。
代碼演示
1.代碼
/*多尺度視網(wǎng)膜增強*/ //第一個參數(shù)輸入的原始圖像 //第二參數(shù)輸出的圖像 //第三個參數(shù) void multiScaleRetinex(const Mat &src, Mat &dst) {//增強尺度int gain = 128;int offset = 128;Mat dst_log, dst_f, res_f;vector<double> sigemas;vector<double> weights;for (int i = 0; i < 3; i++){weights.push_back(1.f / 3);}sigemas.push_back(30);sigemas.push_back(150);sigemas.push_back(300);//轉(zhuǎn)換數(shù)據(jù)src.convertTo(dst_f, CV_32FC3);//對數(shù)變換log(dst_f, dst_log);//根據(jù)給定的權(quán)重歸一化double weight = 0;size_t num = weights.size();for (size_t i = 0; i < num; i++){weight += weights[i];}if (weight != 1.0f){dst_log *= weight;}//過濾for (size_t i = 0; i < num; i++){Mat blur = dst_f.clone();gaussianFilter(blur, sigemas[i]);log(blur, res_f);//計算加權(quán)差res_f *= weights[i];dst_log -= res_f;}dst = (dst_log * gain) + offset;dst.convertTo(dst, CV_8UC3); }//高斯濾波 void gaussianFilter(Mat &img, double sigma) {int filter_size;//不能大于300,大于300強行改成300if (sigma > 300){sigma = 300;}//獲取濾波器的大小,轉(zhuǎn)為奇數(shù)filter_size = (int)floor(sigma * 6) / 2;filter_size = filter_size * 2 + 1;//如果小于3則返回if (filter_size < 3){return;}//高斯模數(shù)GaussianBlur(img, img, cv::Size(filter_size, filter_size), 0); }2.運行效果
總結(jié)
以上是生活随笔為你收集整理的OpenCV图像增强(一)——多尺度视网膜增强的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用OpenCV检测图像中的矩形
- 下一篇: 使用python对比两个目录下的文件名差