8
A
回答
24
通常,Hough變換用於線檢測。
但是,如果它不適合你,擬合線也是一個很好的選擇。
檢查OpenCV fitline功能的更多細節和參數。
既然你已經嘗試過霍夫線,我將在這裏展示擬合線,採用的OpenCV的Python:
# Load image, convert to grayscale, threshold and find contours
img = cv2.imread('lail.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours,hier = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
# then apply fitline() function
[vx,vy,x,y] = cv2.fitLine(cnt,cv2.cv.CV_DIST_L2,0,0.01,0.01)
# Now find two extreme points on the line to draw line
lefty = int((-x*vy/vx) + y)
righty = int(((gray.shape[1]-x)*vy/vx)+y)
#Finally draw the line
cv2.line(img,(gray.shape[1]-1,righty),(0,lefty),255,2)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
下面是我得到的結果是:
編輯:
如果您想查找將物體分成兩部分的線,請首先找到擬合線,然後找到與其垂直的線。
對於這一點,下面添加一段代碼cv2.fitLine下()函數:
nx,ny = 1,-vx/vy
mag = np.sqrt((1+ny**2))
vx,vy = nx/mag,ny/mag
並在下文中我得到的結果:
希望它有助於 !!!
UPDATE:
下面是你請求的第一案Python代碼的C++代碼。該代碼適用於我。輸出是與上述相同給出:
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv/cv.h>
using namespace std;
using namespace cv;
int main()
{
cv::Mat img, gray,thresh;
vector<vector<Point>> contours;
Vec4f lines;
img = cv::imread("line.png");
cv::cvtColor(img,gray,cv::COLOR_BGR2GRAY);
cv::threshold(gray,thresh,127,255,cv::THRESH_BINARY);
cv::findContours(thresh,contours,cv::RETR_LIST,cv::CHAIN_APPROX_SIMPLE);
cv::fitLine(Mat(contours[0]),lines,2,0,0.01,0.01);
//lefty = int((-x*vy/vx) + y)
//righty = int(((gray.shape[1]-x)*vy/vx)+y)
int lefty = (-lines[2]*lines[1]/lines[0])+lines[3];
int righty = ((gray.cols-lines[2])*lines[1]/lines[0])+lines[3];
cv::line(img,Point(gray.cols-1,righty),Point(0,lefty),Scalar(255,0,0),2);
cv::imshow("img",img);
cv::waitKey(0);
cv::destroyAllWindows();
}
相關問題
- 1. 物體檢測android opencv
- 2. Opencv透明物體檢測
- 3. 三維物體檢測-opencv
- 4. 繪製檢測到的物體OpenCV?
- 5. 人物檢測 - opencv
- 6. opencv物體輪廓角點檢測
- 7. 使用OpenCV檢測灰色物體
- 8. OpenCV:可以檢測移動物體?
- 9. OpenCV中哪種邊緣檢測算法適合檢測物體?
- 10. 線檢測的OpenCV
- 11. 物體檢測
- 12. 物體檢測
- 13. 在OpenCV中檢測曲線
- 14. OpenCV的線/尺檢測
- 15. OpenCV的直線檢測
- 16. 檢測2條線的OpenCV
- 17. OpenCV立體相機,檢測物體距離
- 18. Tensorflow物體檢測
- 19. 3D物體檢測
- 20. OpenCV:使用霍夫變換的拋物線檢測
- 21. OpenCV的 - 背景去除和物體檢測
- 22. Python openCV檢測平行線
- 23. OpenCV線檢測一般
- 24. OpenCV線段檢測器
- 25. 檢測動作腳本3中物體的最近線條
- 26. Opencv哈爾級聯訓練/檢測簡單物體
- 27. 圖像中物體的顏色檢測
- 28. 檢測圖像中的物體
- 29. 使用openCV在android中檢測Hough線
- 30. 螢火蟲:物體檢測
非常感謝你,我會嘗試這個今天:d 哦,我是你的博客的粉絲:) –
你有C++的任何版本的? :P –
嗨,所有的功能都是OpenCV的標準功能。因此,如果您檢查opencv文檔,您可以爲我使用的每個python函數找到相應的C++函數。請自己嘗試,如果您發現任何困難,請評論我。我會盡力幫助... –