我想分開OpenCv中的對象,如下圖所示: 但是,如果我使用cvDilate或cvErode對象一起成長...如何用OpenCv做到這一點?cvDilate/cvErode:如何避免分離的對象之間的連接?
2
A
回答
0
據我所知,OpenCV沒有「XOR擴張」(雖然這將是非常好的)。
爲了得到相似的結果,您可以嘗試侵蝕(如'd'),並使用被侵蝕的中心作爲Voronoi分割的種子,然後您可以與原始圖像進行「與」運算。
0
侵蝕和擴張後試圖閾值的圖像消除弱元素。只有強大的地區應該留下來,從而改善物體分離。順便說一下,您可以更清楚地瞭解您的cvDilate或cvErode問題。
1
看起來你需要編寫自己的擴張功能,然後自己添加xor功能。
每OpenCV的文檔,這裏是cvdilate使用規則:
DST =擴張(SRC,元素):DST(X,Y)= MAX((X 'Y')的元素)) SRC(X + X 'Y + Y')
這裏是一個起點僞代碼(這不包括XOR碼):
void my_dilate(img) {
for(i = 0; i < img.height; i++) {
for(j = 0; j < img.width; j++) {
max_pixel = get_max_pixel_in_window(img, i, j);
img.pixel(i,j) = max_pixel;
}
}
}
int get_max_pixel_in_window(img, center_row, center_col) {
int window_size = 3;
int cur_max = 0;
for(i = -window_size; i <= window_size; i++) {
for(j = -window_size; j <= window_size; j++) {
int cur_col = center_col + i;
int cur_row = center_row + j;
if(out_of_bounds(img, cur_col, cur_row)) {
continue;
}
int cur_pix = img.pixel(center_row + i, center_col + j);
if(cur_pix > cur_max) {
cur_max = cur_pix;
}
}
}
return cur_max;
}
// returns true if the x, y coordinate is outside of the image
int out_of_bounds(img, x, y) {
if(x >= img.width || x < 0 || y >= img.height || y <= 0) {
return 1;
}
return 0;
}
相關問題
- 1. 如何避免兩個節點之間的雙重連接?
- 2. 如何避免2個對象之間的交叉引用?
- 3. 避免長連接時間
- 4. 如何避免連接
- 5. 如何避免之間的文本{{}}
- 6. 如何獲得對接表格之間的分離器手柄
- 7. 如何避免cookie的對象注入?
- 8. 如何避免增加兩個節點之間的連接兩次
- 9. 如何避免導致MySQL中對稱結果的自連接?
- 10. 如何避免spring + hibernate連接太多?
- 11. 如何避免最大連接限制?
- 12. 如何避免太多連接?
- 13. 連接兩個盒子之間的連線避免傳遞其他人
- 14. 避免部分對象實例化
- 15. 兩個對象之間的距離
- 16. 對象之間的較遠距離
- 17. ODP.NET:避免與連接連接池
- 18. 如何避免不設置到對象
- 19. 如何在活動之間保持FTP連接(或任何連接對象)
- 20. 如何使用linq連接2個表,但避免匿名對象
- 21. AirBnB如何顯示FB連接用戶之間的分離程度?
- 22. 如何避免變量Errno :: ECONNREFUSED:(連接被拒絕 - (2)連接
- 23. 分離的對象
- 24. 如何避免密碼查詢中的笛卡爾積,並仍然在對象之間創建鏈接?
- 25. 避免html標記之間的空格
- 26. 避免img之間的空格
- 27. 如何避免動態分配小對象?
- 28. 如何避免子GUI對象接管鼠標偵聽器?
- 29. WPF綁定 - 避免間接
- 30. 避免頻繁的數據庫連接
你能告訴我使用這個功能的「out_of_bounds (img,cur_col,cur_row)「。 如果你編寫它的僞代碼,這將是一件好事。 – RidaSana 2012-02-12 23:57:34