基於opencv的sauvola二值演算法

2021-08-20 05:02:31 字數 1472 閱讀 5910

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...