用opencv對這影像進行識別,比如說第10級,每個小正方形里都能識別出條數,但11級不行,那就算能識別到第10級。有沒有大神能幫下小弟,小弟感激不盡,試了好多想法都不行啊
uj5u.com熱心網友回復:
換halconuj5u.com熱心網友回復:
我還是個green finger,還望老師講細一點,什么是halconuj5u.com熱心網友回復:
uj5u.com熱心網友回復:
求個大佬解決下唄,希望能給個思路也行啊uj5u.com熱心網友回復:
你先說說你的思路吧uj5u.com熱心網友回復:
一起學習一下~uj5u.com熱心網友回復:
我是想通過影像分割,把每4組分為一段,分割好之后,用畫輪廓的方式進行查找個數。這個圖上是有規律的,前16個都是4條線/一個長方形,后面16個事5條/一個長方形。關鍵是怎么實作自動分割影像,而且影像放大縮小的時候也要能分割好uj5u.com熱心網友回復:
百度搜“halcon”
uj5u.com熱心網友回復:
支持幫頂一下。uj5u.com熱心網友回復:
我百度過,但要用halcon,學的時間不太夠啊。現在時間比較趕。老師能不能指條明路,給個思路
uj5u.com熱心網友回復:
halcon的例子程式估計都不用改就能完成你需要的功能。uj5u.com熱心網友回復:
halcon的例子程式估計都不用改就能完成你需要的功能。
好的,我試試看,老師
uj5u.com熱心網友回復:
好高深的東東,膜拜uj5u.com熱心網友回復:
好高大上的感覺uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
支持幫頂一下。uj5u.com熱心網友回復:
換halcon
老師,用haclon算子匹配只能匹配出有多少個啊,萬一它跳著匹配那怎么辦?中間少了一個的話那不就錯了么?有沒有再牛一點的方法解決這個問題?
uj5u.com熱心網友回復:
想辦法把直線細化uj5u.com熱心網友回復:
想辦法把直線細化
用處理過的影像,不過是手動的,比較清晰,但是還是得進行影像分割,不然沒辦法知道是不是跳過了某個正方形沒識別。
uj5u.com熱心網友回復:
halcon的例子程式估計都不用改就能完成你需要的功能。
這個功能很強大的軟體還是實作不了我想要的功能呀,老師,求教啊
uj5u.com熱心網友回復:
halcon的例子程式估計都不用改就能完成你需要的功能。
這個功能很強大的軟體還是實作不了我想要的功能呀,老師,求教啊
只是因為你不會用而已。
但其實我也沒怎么實際用過。
uj5u.com熱心網友回復:
你的原始圖片解析度太低。uj5u.com熱心網友回復:
halcon的例子程式估計都不用改就能完成你需要的功能。
這個功能很強大的軟體還是實作不了我想要的功能呀,老師,求教啊
只是因為你不會用而已。
但其實我也沒怎么實際用過。
我這個圖最基本的要求就是把影像分割成沒4個小長方形為一個影像,而且拍攝圖片的時候可能會因為遠近距離不同導致圖片大小不同,只有圖片正中心永遠不會變。我找了一下halcon的例程庫,沒有找到可以這樣的啊。
uj5u.com熱心網友回復:
你的原始圖片解析度太低。
,我也很絕望,但是相機就這樣,我控制不了
uj5u.com熱心網友回復:
凡是經過各種物理的(比如可見光、紅外線、紫外線、X射線、……,光學顯微鏡,掃描隧道顯微鏡,光學望遠鏡,射電望遠鏡,……)傳感器或軟體的演算法(比如偽彩色、色階平衡、銳化、對比度、……)處理后連人眼都無法分辨的,就別指望電腦能分辨了。uj5u.com熱心網友回復:
凡是經過各種物理的(比如可見光、紅外線、紫外線、X射線、……,光學顯微鏡,掃描隧道顯微鏡,光學望遠鏡,射電望遠鏡,……)傳感器或軟體的演算法(比如偽彩色、色階平衡、銳化、對比度、……)處理后連人眼都無法分辨的,就別指望電腦能分辨了。
只要識別到人眼能看到的級別就行,不需要太清楚,只要能識別出來就行
uj5u.com熱心網友回復:
先用不同的人眼試著識別不同的圖片,得到正確和錯誤的兩組結果。然后再用程式識別正確的那組。
uj5u.com熱心網友回復:
先用不同的人眼試著識別不同的圖片,得到正確和錯誤的兩組結果。
然后再用程式識別正確的那組。
現在關鍵是如何識別正確的那組,我現有的辦法做不到呀。而且要求是一次性自動識別完,然后給出識別級數
uj5u.com熱心網友回復:
先用不同的人眼試著識別不同的圖片,得到正確和錯誤的兩組結果。
然后再用程式識別正確的那組。
現在關鍵是如何識別正確的那組,我現有的辦法做不到呀。而且要求是一次性自動識別完,然后給出識別級數
我勸你這樣做的目的就是遵循我26樓所說的真理。
uj5u.com熱心網友回復:
先用不同的人眼試著識別不同的圖片,得到正確和錯誤的兩組結果。
然后再用程式識別正確的那組。
現在關鍵是如何識別正確的那組,我現有的辦法做不到呀。而且要求是一次性自動識別完,然后給出識別級數
我勸你這樣做的目的就是遵循我26樓所說的真理。
那起碼第5組長方形可以識別啊,關鍵是如何識別出來里面有幾條線呀?
uj5u.com熱心網友回復:

這個時間也是醉了,這才2點多,帖子回復時間3點多。我穿越了?
uj5u.com熱心網友回復:
識別幾條線參考OpenCV函式reduceuj5u.com熱心網友回復:
識別幾條線參考OpenCV函式reduce
老師啊,我這是要準確識別出到了哪一個級別,用那些直線檢測,輪廓檢測都是全圖檢測,得到的結果都不對啊,都超出好多的,有很多干擾項啊。老師,咱能給個可以進行下去的思路不
uj5u.com熱心網友回復:
erode 腐蝕成小正方形findContours 提取各小正方形的輪廓
warpAffine 根據正方形的邊的傾斜角度旋轉使其擺正
reduce 累加或平均到一維陣列中
判斷一維陣列中數值的波峰波谷個數即小正方形中有幾條線

uj5u.com熱心網友回復:
erode 腐蝕成小正方形
findContours 提取各小正方形的輪廓
warpAffine 根據正方形的邊的傾斜角度旋轉使其擺正
reduce 累加或平均到一維陣列中
判斷一維陣列中數值的波峰波谷個數即小正方形中有幾條線
我處理的最好的圖片就是20樓的那張圖,我之前也和您一樣的想法,但是我是用數輪廓的方法做的,發現好多識別不出來的小短線也算進去了,這樣就誤差特別大了。我看著您說的方法好像和我的有點像,但是又不確定,您看是不是和我的想法差不多呢?
uj5u.com熱心網友回復:
換高解析度攝像頭才是王道。uj5u.com熱心網友回復:
換高解析度攝像頭才是王道。
這個硬體沒辦法。現在已經問到大致的解題思路了
uj5u.com熱心網友回復:
各位大佬,我又發現了個問題。我的那個設備拍取影像的時候一直有一種中間往外凸,四周往后面凹的效果,而且圖片中心也不準,不好往下做,有大佬知道怎么做么uj5u.com熱心網友回復:
各位大佬,我又發現了個問題。我的那個設備拍取影像的時候一直有一種中間往外凸,四周往后面凹的效果,而且圖片中心也不準,不好往下做,有大佬知道怎么做么
OpenCV的例子代碼中就有修正枕形失真的。如果我沒猜錯的話。
uj5u.com熱心網友回復:
Undistort2校正影像因相機鏡頭引起的變形
void cvUndistort2( const CvArr* src, CvArr* dst,
const CvMat* intrinsic_matrix,
const CvMat* distortion_coeffs );
src
原始影像(已經變形的影像)。
dst
結果影像(已經校正的影像)。
intrinsic_matrix
相機內引數矩陣,格式為 。
distortion_coeffs
四個變形系陣列成的向量,大小為4x1或者1x4,格式為[k1,k2,p1,p2]。
函式cvUndistort2對影像進行變換來抵消徑向和切向鏡頭變形。相機引數和變形引數可以通過函式cvCalibrateCamera2取得。使用本節開始時提到的公式,對每個輸出影像像素計算其在輸入影像中的位置,然后輸出影像的像素值通過雙線性插值來計算。如果影像得解析度跟定標時用得影像解析度不一樣,fx、fy、cx和cy需要相應調整,因為形變并沒有變化。
uj5u.com熱心網友回復:
Undistort2
校正影像因相機鏡頭引起的變形
void cvUndistort2( const CvArr* src, CvArr* dst,
const CvMat* intrinsic_matrix,
const CvMat* distortion_coeffs );
src
原始影像(已經變形的影像)。
dst
結果影像(已經校正的影像)。
intrinsic_matrix
相機內引數矩陣,格式為 。
distortion_coeffs
四個變形系陣列成的向量,大小為4x1或者1x4,格式為[k1,k2,p1,p2]。
函式cvUndistort2對影像進行變換來抵消徑向和切向鏡頭變形。相機引數和變形引數可以通過函式cvCalibrateCamera2取得。使用本節開始時提到的公式,對每個輸出影像像素計算其在輸入影像中的位置,然后輸出影像的像素值通過雙線性插值來計算。如果影像得解析度跟定標時用得影像解析度不一樣,fx、fy、cx和cy需要相應調整,因為形變并沒有變化。
老師,你牛爆了
,不過角點的坐標和世界點的坐標不懂怎么取值啊。
uj5u.com熱心網友回復:
這個拍攝到的圖片會畸變,而且前后移動的時候圓心會上線跑偏。所以即使是糾正畸變之后圖片也不對了,不知道怎么辦啊uj5u.com熱心網友回復:
OpenCV糾正畸變的函式是開源的,參考其改為支持圓心向上跑偏的畸變糾正。uj5u.com熱心網友回復:
OpenCV糾正畸變的函式是開源的,參考其改為支持圓心向上跑偏的畸變糾正。
我的意思是他在最上面和最上面下來點,畸變率是不一樣的,圓心跑偏之后,對應的影像也跑偏了。兩張圖相同的地方畸變率不一樣,矯正之后還一樣么?
uj5u.com熱心網友回復:
搜“梯形畸變校正”uj5u.com熱心網友回復:
搜“梯形畸變校正”
用了之后發現變成了梯形,它本身應該是上下都畸變的。
uj5u.com熱心網友回復:
完完全全需要膜拜uj5u.com熱心網友回復:
枕形 + 梯形uj5u.com熱心網友回復:
枕形 + 梯形
老師,我上網查了一下,發現那個畸變好像是桶形畸變
uj5u.com熱心網友回復:
枕形 + 梯形
老師,有沒有辦法定位到圖中的十字形的中心呀?
uj5u.com熱心網友回復:
輪廓匹配十字中心。uj5u.com熱心網友回復:
輪廓匹配十字中心。
趙老師,我這不同距離的圖片用同一個模板,輪廓匹配到的結果不一樣啊,很尷尬啊。
uj5u.com熱心網友回復:
那就不同距離用不同模板。uj5u.com熱心網友回復:
opencv是什么uj5u.com熱心網友回復:
那就不同距離用不同模板。
現在要實作的是不管在什么距離拍攝都能自動識別出來,不可能說手動去選模板啊。
uj5u.com熱心網友回復:
“不管在什么距離”吹,繼續吹!
uj5u.com熱心網友回復:
“不管在什么距離”
吹,繼續吹!
肯定是一定距離之內啊,怎么可能不限。我這意思是比如在你距離20cm和25cm處都得識別出來
uj5u.com熱心網友回復:
“不管在什么距離”
吹,繼續吹!
肯定是一定距離之內啊,怎么可能不限。我這意思是比如在你距離20cm和25cm處都得識別出來
那你不會先判斷距離20cm還是25cm,再分別識別?
uj5u.com熱心網友回復:
“不管在什么距離”
吹,繼續吹!
肯定是一定距離之內啊,怎么可能不限。我這意思是比如在你距離20cm和25cm處都得識別出來
那你不會先判斷距離20cm還是25cm,再分別識別?
但是人家要1cm 識別一次,我還得1cm做一個模板啊?肯定不現實啊。
uj5u.com熱心網友回復:
“不管在什么距離”
吹,繼續吹!
肯定是一定距離之內啊,怎么可能不限。我這意思是比如在你距離20cm和25cm處都得識別出來
那你不會先判斷距離20cm還是25cm,再分別識別?
但是人家要1cm 識別一次,我還得1cm做一個模板啊?肯定不現實啊。
每1cm識別一次,就算從1cm到100cm也就才100個模板,怎么就不現實了?!

最不濟你還可以借用代碼生成技術,自動生成100個模板啊!
代碼生成技術參考下面:
//codegen.c
// 輸入一組字串,比如
// aa ss ddd dd 33 dd
// 然后自動生成一個函式 int A(const char*);
// 實作A("aa")回傳0 A("ss")回傳1 依次類推
#include <stdio.h>
int main(int argc,char **argv) {
int i;
if (argc<2) {
printf("%s p1 [p2 ...] [>result.c]\nGenerate code int A(const char *a); 0==A(\"p1\") 1==A(\"p2\") ...",argv[0]);
return 1;
}
//printf("#include <string.h>\n");
printf("int A(const char *a) {\n");
for (i=0;i<argc-1;i++) {
printf(" if (0==strcmp(a,\"%s\")) return %d;\n",argv[i+1],i);
}
printf(" return -1;\n");
printf("}\n");
return 0;
}
//C:\test\Debug>codegen.exe
//codegen.exe p1 [p2 ...] [>result.c]
//Generate code int A(const char *a); 0==A("p1") 1==A("p2") ...
//C:\test\Debug>codegen.exe aa ss ddd dd 33 dd
//int A(const char *a) {
// if (0==strcmp(a,"aa")) return 0;
// if (0==strcmp(a,"ss")) return 1;
// if (0==strcmp(a,"ddd")) return 2;
// if (0==strcmp(a,"dd")) return 3;
// if (0==strcmp(a,"33")) return 4;
// if (0==strcmp(a,"dd")) return 5;
// return -1;
//}
//
//c:\test\Debug>codegen.exe aa ss ddd dd 33 dd >result.c
//
//c:\test\Debug>type result.c
//int A(const char *a) {
// if (0==strcmp(a,"aa")) return 0;
// if (0==strcmp(a,"ss")) return 1;
// if (0==strcmp(a,"ddd")) return 2;
// if (0==strcmp(a,"dd")) return 3;
// if (0==strcmp(a,"33")) return 4;
// if (0==strcmp(a,"dd")) return 5;
// return -1;
//}
//
uj5u.com熱心網友回復:
“不管在什么距離”
吹,繼續吹!
肯定是一定距離之內啊,怎么可能不限。我這意思是比如在你距離20cm和25cm處都得識別出來
那你不會先判斷距離20cm還是25cm,再分別識別?
但是人家要1cm 識別一次,我還得1cm做一個模板啊?肯定不現實啊。
每1cm識別一次,就算從1cm到100cm也就才100個模板,怎么就不現實了?!
最不濟你還可以借用代碼生成技術,自動生成100個模板啊!
代碼生成技術參考下面://codegen.c
// 輸入一組字串,比如
// aa ss ddd dd 33 dd
// 然后自動生成一個函式 int A(const char*);
// 實作A("aa")回傳0 A("ss")回傳1 依次類推
#include <stdio.h>
int main(int argc,char **argv) {
int i;
if (argc<2) {
printf("%s p1 [p2 ...] [>result.c]\nGenerate code int A(const char *a); 0==A(\"p1\") 1==A(\"p2\") ...",argv[0]);
return 1;
}
//printf("#include <string.h>\n");
printf("int A(const char *a) {\n");
for (i=0;i<argc-1;i++) {
printf(" if (0==strcmp(a,\"%s\")) return %d;\n",argv[i+1],i);
}
printf(" return -1;\n");
printf("}\n");
return 0;
}
//C:\test\Debug>codegen.exe
//codegen.exe p1 [p2 ...] [>result.c]
//Generate code int A(const char *a); 0==A("p1") 1==A("p2") ...
//C:\test\Debug>codegen.exe aa ss ddd dd 33 dd
//int A(const char *a) {
// if (0==strcmp(a,"aa")) return 0;
// if (0==strcmp(a,"ss")) return 1;
// if (0==strcmp(a,"ddd")) return 2;
// if (0==strcmp(a,"dd")) return 3;
// if (0==strcmp(a,"33")) return 4;
// if (0==strcmp(a,"dd")) return 5;
// return -1;
//}
//
//c:\test\Debug>codegen.exe aa ss ddd dd 33 dd >result.c
//
//c:\test\Debug>type result.c
//int A(const char *a) {
// if (0==strcmp(a,"aa")) return 0;
// if (0==strcmp(a,"ss")) return 1;
// if (0==strcmp(a,"ddd")) return 2;
// if (0==strcmp(a,"dd")) return 3;
// if (0==strcmp(a,"33")) return 4;
// if (0==strcmp(a,"dd")) return 5;
// return -1;
//}
//
“不管在什么距離”
吹,繼續吹!
肯定是一定距離之內啊,怎么可能不限。我這意思是比如在你距離20cm和25cm處都得識別出來
那你不會先判斷距離20cm還是25cm,再分別識別?
但是人家要1cm 識別一次,我還得1cm做一個模板啊?肯定不現實啊。
每1cm識別一次,就算從1cm到100cm也就才100個模板,怎么就不現實了?!
最不濟你還可以借用代碼生成技術,自動生成100個模板啊!
代碼生成技術參考下面://codegen.c
// 輸入一組字串,比如
// aa ss ddd dd 33 dd
// 然后自動生成一個函式 int A(const char*);
// 實作A("aa")回傳0 A("ss")回傳1 依次類推
#include <stdio.h>
int main(int argc,char **argv) {
int i;
if (argc<2) {
printf("%s p1 [p2 ...] [>result.c]\nGenerate code int A(const char *a); 0==A(\"p1\") 1==A(\"p2\") ...",argv[0]);
return 1;
}
//printf("#include <string.h>\n");
printf("int A(const char *a) {\n");
for (i=0;i<argc-1;i++) {
printf(" if (0==strcmp(a,\"%s\")) return %d;\n",argv[i+1],i);
}
printf(" return -1;\n");
printf("}\n");
return 0;
}
//C:\test\Debug>codegen.exe
//codegen.exe p1 [p2 ...] [>result.c]
//Generate code int A(const char *a); 0==A("p1") 1==A("p2") ...
//C:\test\Debug>codegen.exe aa ss ddd dd 33 dd
//int A(const char *a) {
// if (0==strcmp(a,"aa")) return 0;
// if (0==strcmp(a,"ss")) return 1;
// if (0==strcmp(a,"ddd")) return 2;
// if (0==strcmp(a,"dd")) return 3;
// if (0==strcmp(a,"33")) return 4;
// if (0==strcmp(a,"dd")) return 5;
// return -1;
//}
//
//c:\test\Debug>codegen.exe aa ss ddd dd 33 dd >result.c
//
//c:\test\Debug>type result.c
//int A(const char *a) {
// if (0==strcmp(a,"aa")) return 0;
// if (0==strcmp(a,"ss")) return 1;
// if (0==strcmp(a,"ddd")) return 2;
// if (0==strcmp(a,"dd")) return 3;
// if (0==strcmp(a,"33")) return 4;
// if (0==strcmp(a,"dd")) return 5;
// return -1;
//}
//
老師啊,這個我就舉個例子,人家硬體的要求是0.1mm為單位的啊,而且模板要挨個試,同一個物體在兩個距離拍出來的圖片用同一個模板來做輪廓匹配都不成功,找模板就得找死。
。現在我想著縮小匹配的范圍,看能不能順利找到。
uj5u.com熱心網友回復:
或者干脆你上Tensorflow得了!uj5u.com熱心網友回復:
輪廓模板不是大小和旋轉角度無關的嗎?uj5u.com熱心網友回復:
輪廓模板不是大小和旋轉角度無關的嗎?
不同的距離反正用同一個模板不能成功匹配,可能是拍攝的時候的環境的微小變化造成的吧。現在我通過縮小感興趣區域,找到了十字的中心了,還是用的輪廓匹配。麻煩老師傳道受業解惑啦。
uj5u.com熱心網友回復:
《學習OpenCV(中文版)》279頁 輪廓的匹配uj5u.com熱心網友回復:
《學習OpenCV(中文版)》279頁 輪廓的匹配
老師,那個中心找著了,還是老師牛
。我還有一個小問題,有沒有辦法從圖片上看出世什么畸變?我在發帖時候的那張圖片,我不知道是哪種畸變,所以不知道如何處理,有沒有辦法找出畸變?
uj5u.com熱心網友回復:
https://www.baidu.com/s?wd=鏡頭畸變
現代中國人的能力差別很大程度上體現在會不會合理高效地使用百度上。百度搜相關關鍵字。
uj5u.com熱心網友回復:
https://www.baidu.com/s?wd=鏡頭畸變
現代中國人的能力差別很大程度上體現在會不會合理高效地使用百度上。
百度搜相關關鍵字。

老師,那些都是修正畸變的啊,我百度過,好像沒有判斷是哪一種畸變的
uj5u.com熱心網友回復:
你不需要編程判斷是哪種畸變,你只需要用人眼判斷出是哪種畸變。uj5u.com熱心網友回復:
支持···············uj5u.com熱心網友回復:
枕形 + 梯形么?uj5u.com熱心網友回復:
冒泡,我是新手。uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
halcon確實好用,就是許可麻煩一點uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
halcon確實好用,就是許可麻煩一點
halcon用起來么有opencv順手,也不太會。
uj5u.com熱心網友回復:
枕形 + 梯形么?
用張氏標定法應該可以直接矯正了吧
uj5u.com熱心網友回復:
圍觀uj5u.com熱心網友回復:
又回到起點了,如何分割影像成了一個問題,覺得數像素好像誤差有點大uj5u.com熱心網友回復:
回復的積分 轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/82958.html
標籤:圖形處理/算法
