我有些喜歡在ImageMagick的Canny邊緣檢測,並得到了你輸入的照片下面,使用此命令:
convert photo.jpg -canny 0x12+10%+30% out.jpg
我當時曾與HoughLinesP來自OpenCV的一個嘗試,並得到了下面的圖片:
使用此代碼這在很大程度上來自OpenCV的網站借:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
const char* filename = argc >= 2 ? argv[1] : "in.jpg";
Mat src = imread(filename, 0);
if(src.empty())
{
cout << "can not open " << filename << endl;
return -1;
}
Mat dst, cdst;
dst=src;
cvtColor(src, cdst, CV_GRAY2BGR);
vector<Vec4i> lines;
HoughLinesP(dst, lines, 1, CV_PI/90, 150, 300, 50);
printf("Lines detected: %d\n",(int)lines.size());
for(size_t i = 0; i < lines.size(); i++)
{
Vec4i l = lines[i];
line(cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, CV_AA);
}
imshow("source", src);
imshow("detected lines", cdst);
waitKey();
return 0;
}
額外的材料
感謝@dlemstra關於支持HoughLines的ImageMagick輸入,以及這個建議,我在ImageMagick的單次調用中做了以下操作(不使用O penCV):
convert photo.jpg \
\(+clone -canny 0x5+10%+30% -write photo_canny.jpg \
-background none -fill red -stroke red -strokewidth 2 \
-hough-lines 9x9+150 -write photo_lines.jpg \) -composite photo_hough.jpg
它看起來是這樣的:
我想知道尋找長直立邊,使其垂直後的圖像旋轉,然後切割圖像沿該線並尋找左下角的水平邊緣,使用不同的參數或拉伸後的圖像寬度強調水平線...
什麼定義了葉片的質量?直線?還有別的嗎?作爲下一步處理,您將如何處理X,Y座標? –
馬克,有很多事情會用XY座標完成 - 組件內每個葉片的比較(視覺,基本統計數據),每個產品系列內的比較,公差疊加的影響/缺陷顯示在組件的一側比較另一個......名單繼續。一旦我有了原始的X,Y數據,可能性就很大。 – Rahul