sauvola演算法是乙個比較不錯的區域性二值化演算法,有不少人也具體實現了其**,但是本人覺得裡面存在一些bug和不方便opencv呼叫,所以對其適當的修改。
但是修改之後,仍然就是存在一些問題,就是難以找到乙個比較大的資料型別去儲存,這個bug等以後有空再處理。不過通過修改後的**進行學習,還是很不錯的。**如下:
#include "opencv2/opencv.hpp"
static
int calcmaxvalue(int a, int b)
static
double calcmaxvalue(double a, double b)
static
int calcminvalue(int a, int b)
static
double calcminvalue(double a, double b)
/** @brief sauvolathresh二值演算法
此**不適用與解析度較大的影象, 此bug準備有空再處理
@param src 單通道灰度圖
@param dst 單通道處理後的圖
@param k threshold = mean*(1 + k*((std / 128) - 1))
@param wndsize 處理區域寬高, 一定是奇數
*/void sauvolathresh(const cv::mat& src, cv::mat& dst, const
int k, const cv::size wndsize)
else}}
double diff = 0.0;
double sqdiff = 0.0;
double diagsum = 0.0;
double idiagsum = 0.0;
double sqdiagsum = 0.0;
double sqidiagsum = 0.0;
for (int x = 0; x < src.cols; ++x)
if (xmin == 0 && ymin == 0)
else
if (xmin > 0 && ymin == 0)
else
if (xmin == 0 && ymin > 0)
else
double mean = diff / area;
double stdvalue = sqrt((sqdiff - diff*diff / area) / (area - 1));
double threshold = mean*(1 + k*((stdvalue / 128) - 1));
if (src.at(y, x) < threshold)
else}}
delete integralimg;
delete integralimgsqrt;
}
基於Opencv的SIFT SURF HOG的實現
sift實現 surf的實現 include include includeusing namespace std using namespace cv using namespace cv xfeatures2d int main int argc,char ar namedwindow inpu...
基於opencv的meanshift演算法的初步學習
meanshift 均值漂移。其核心是利用概率密度的梯度來找到區域性最優。影象上用,其實現過程就是在乙個給定的範圍,一直按要求 靠近重心的方向 迭代直到達到預期效果。由於本人以後碩士階段做影象識別和跟蹤方面的研究,索性在目標跟蹤上進一步學習。在opencv2.3中這樣定義 cvapi int cvm...
基於Opencv的MeanShift跟蹤演算法實現
include cv.h include highgui.h include include iplimage image 0,hsv 0,hue 0,mask 0,backproject 0,histimg 0 用hsv中的hue分量進行跟蹤 cvhistogram hist 0 直方圖類 int...