我寫這個博文時間為 2015/11/24日,注意時間因為,網上很多文章時間上很久遠,有的已經不能參考了
我也找了很多,但是很可惜沒有找到多少有價值的資訊
大部分的資訊都很老舊而且有關aspriseocr 的不少
尤其關於delphi +aspriseocr 的更少
我的開發環境 為 delphi7 +win8 64 位
這個應用有幾點要注意
1. 識別的只能為 白底黑字 ,其他型別的不能正確
2. aspriseocr.dll ,devil.dll ,ilu.dll
3. 呼叫dll 函式定義為
//function ocr(imgname:string;imagetype:integer):pchar;stdcall;
// external 'aspriseocr.dll';
function ocr(imgname:pchar;i:integer):pchar;stdcall;external 'aspriseocr.dll';
function ocrbarcodes(imgname:string;imagetype:integer):pchar;stdcall;
external 'aspriseocr.dll';
function ocrpart(filename :string; imagetype:integer; startx :integer;
starty :integer; width:integer; height:integer):pchar;stdcall;
external 'aspriseocr.dll';
請看上面第乙個函式的定義 ocr 的引數imagname string 或者 pchar 哪個正確?
我可以告訴你們 都是可以編譯通過的 而且 兩種定義都是對的
所以很多事情需要自己驗證
截圖識別的 處理
//我的圖列
//的2值化 - 網上大部分人的做法
function tfrmmain.cbmptwovalues(bmp:tbitmap;graythreshold:byte):tbitmap;
varp: pbytearray;
gray, x, y: integer;
abmp: tbitmap;
begin
abmp:=tbitmap.create;
abmp:=bmp;
//設定為24位真彩色
abmp.pixelformat := pf24bit;
randomize;
for y := 0 to abmp.height - 1 do
begin
p := abmp.scanline[y];
for x := 0 to abmp.width - 1 do
begin
//乙個象素點三個位元組
// y = 0.299 * r + 0.587 * g + 0.114 * b
gray := round(p[x * 3 + 2] * 0.3 + p[x * 3 + 1] * 0.59 +
p[x * 3] * 0.11);
if gray > graythreshold then //全域性閥值128
begin
p[x * 3] := 255;
p[x * 3 + 1] := 255;
p[x * 3 + 2] := 255;
endelse
begin
p[x * 3] := 0;
p[x * 3 + 1] := 0;
p[x * 3 + 2] := 0;
end;
end;
end;
result:=abmp;
end;
//的2值化 - 我自己的做法(針對我的特定的)
function tfrmmain.cbmpblackwhiteexe(abmp: tbitmap;amaincolor:tcolor;amaintorl:byte): tbitmap;
varbm:tbitmap;
bx,by:integer;
acolor:tcolor;
aclr,aclg,aclb:byte;
achagecoloren:boolean;
begin
bm:=tbitmap.create;
bm:=abmp;
for bx := 0 to bm.width-1 do
begin
for by := 0 to bm.height-1 do
begin
//clblue = tcolor($ff0000); clblack = tcolor($000000);
//clred = tcolor($0000ff);clwhite = tcolor($ffffff);
//cllime = tcolor($00ff00);
acolor:=bm.canvas.pixels[bx,by];
achagecoloren:=false;
aclb:=abs( byte(acolor shr 16)- byte(amaincolor shr 16));
if aclb<=amaintorl then
begin
// blue ok
aclg:=abs( byte(acolor shr 8)-byte(amaincolor shr 8));
if aclg <= amaintorl then
begin
//green ok
aclr:=abs( byte(acolor)-byte(amaincolor));
if aclr <= amaintorl then
begin
//red ok
achagecoloren:=true;
end;
end;
end;
if achagecoloren then
begin
bm.canvas.pixels[bx,by]:=tcolor($ffffff); //white
endelse
begin
bm.canvas.pixels[bx,by]:=tcolor($000000); //black
end;
end;
end;
result:=bm;
end;
//反色
procedure tfrmmain.negative(var bmp:tbitmap);
vari, j: integer;
prgb: prgbtriple;
begin
bmp.pixelformat:=pf24bit;
for i := 0 to bmp.height - 1 do
begin
prgb := bmp.scanline[i];
for j := 0 to bmp.width - 1 do
begin
prgb^.rgbtred :=not prgb^.rgbtred ;
prgb^.rgbtgreen :=not prgb^.rgbtgreen;
prgb^.rgbtblue :=not prgb^.rgbtblue;
inc(prgb);
end;
end;
end;
寫的不好 別噴我啊
再看APP安全
堡壘最先從內部攻破。列寧 最安全的地方,同時也是最危險的地方。最近的兩次蘋果安全危機,一次是因為icloud伺服器,一次是因為開發者使用的xcode。別笑,是真的。github素來以開源出名,github建站之初的目的是借助git協議 版本控制協議,和svn協議作用一樣,但是功能比svn強大 為程式...
再看社交網路
社交網路領域的術語 圖譜 一種網狀結構,代表實體 興趣,人 和聯絡。實體就像頻率分量,聯絡就像相位和幅度。興趣圖譜 社交圖譜,從譜中濾出你關心的分量,進而建立聯絡 通訊 聚類 一種演算法,用來從社交網路 資料庫 中根據需求分類,便於提高搜尋的查全率。查全率 一次查詢中需要的和所有的之比 和查準率的關...
基因檢測 再看
description 用乙個字串表示一段基因,例如 ctatgggttt 兩段基因的相似度定義為它們所包含的最大公共子串的長度。例如 ccttgg 和 tgggc 的最大公共子串為 tgg 它的長度為3,則我們稱 ccttgg 和 tgggc 的相似度為3。現給定兩段基因,要求計算它們的相似度。i...