使用單片機+攝像頭 處理圖片資料
已經生成好了一個(長度*寬) (188 *70)的二維陣列 并且使用大津法尋找到了闕值。
有沒有什么演算法能快速將圖片陣列轉化成 經過闕值比較 生成二值化之后的陣列
uj5u.com熱心網友回復:
void photo_get()
{
int num = 0;
for(num = 0;num < MT9V03X_H;num++)
{
memcpy(dis_image[num],mt9v03x_image[num],MT9V03X_W);//原始資料為mt9v03x_image 結果memcpy 復制到dis_image
}
}
//以下是大津法 計算得到dis_image 圖片的闕值 闕值輸出為 threshold
uint8 threshold = 0;
void my_adapt_threshold(uint8 *image, uint16 col, uint16 row)
{
#define GrayScale 256
uint16 width = col;
uint16 height = row;
int pixelCount[GrayScale];
float pixelPro[GrayScale];
int i, j, pixelSum = width * height/4;
uint8* data = image; //?????????
for (i = 0; i < GrayScale; i++)
{
pixelCount[i] = 0;
pixelPro[i] = 0;
}
uint32 gray_sum=0;
for (i = 0; i < height; i+=2)
{
for (j = 0; j < width; j+=2)
{
pixelCount[(int)data[i * width + j]]++;
gray_sum+=(int)data[i * width + j];
}
}
for (i = 0; i < GrayScale; i++)
{
pixelPro[i] = (float)pixelCount[i] / pixelSum;
}
float w0, w1, u0tmp, u1tmp, u0, u1, u, deltaTmp, deltaMax = 0;
w0 = w1 = u0tmp = u1tmp = u0 = u1 = u = deltaTmp = 0;
for (j = 0; j < GrayScale; j++)
{
w0 += pixelPro[j];
u0tmp += j * pixelPro[j];
w1=1-w0;
u1tmp=gray_sum/pixelSum-u0tmp;
u0 = u0tmp / w0;
u1 = u1tmp / w1;
u = u0tmp + u1tmp;
deltaTmp = w0 * pow((u0 - u), 2) + w1 * pow((u1 - u), 2);
if (deltaTmp > deltaMax)
{
deltaMax = deltaTmp;
threshold = j;
}
if (deltaTmp < deltaMax)
{
break;
}
}
// for(i = 0; i < threshold; i++)
// {
// Bin_Array[i] = 0;
// }
// for(i = threshold; i < 256; i++)
// {
// Bin_Array[i] = 1;
// }
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270269.html
標籤:C語言
下一篇:C++全域變數問題
