問題描述:
對於這樣的影象(2副,採用了背投光),如何獲得上面工件的主要方向
主要思路:
1、分別獲得每個工件的輪廓;
2、處理每個輪廓,採用pca(主成分分析)方法,獲得所有輪廓點的集合的中點,主要方向等資訊;
3、繪圖並返回結果。
**略解:
1、讀入,尋找輪廓;
//讀入影象,轉換為灰度
//閾值處理
threshold(bw, bw,
150,
255, cv_thresh_binary);
//尋找輪廓
vector
>
> contours;
vector
> hierarchy;
2、首先以大小篩選輪廓;
//輪廓分析,找到工件
for(size_t i
=0; i
++i)
3、單獨處理每個輪廓,分析其主要方向,繪製結果
//獲得構建的主要方向
doublegetorientation(vector
>
&pts, mat
&img)
//執行pca分析
pca pca_analysis(data_pts, mat(), cv_pca_data_as_row);
//獲得最主要分量,在本例中,對應的就是輪廓中點,也是影象中點
point pos
= point(pca_analysis.mean.at
<
double
>(
0, 0),pca_analysis.mean.at
<
double
>(
0, 1));
//儲存特徵向量和特徵值
vector
> eigen_vecs(
2);vector
<
double
> eigen_val(
2);for(
inti
=0; i
<
2; ++i)
//在輪廓/影象中點繪製小圓
circle(img, pos,
3, cv_rgb(
255,
0, 255),
2);//計算出直線,在主要方向上繪製直線
line(img, pos, pos
+0. 02
* point(eigen_vecs[
0].x
* eigen_val[
0], eigen_vecs[
0].y
* eigen_val[
0]) , cv_rgb(
255,
255,
0));
line(img, pos, pos
+0. 02
* point(eigen_vecs[
1].x
* eigen_val[
1], eigen_vecs[
1].y
* eigen_val[
1]) , cv_rgb(
0, 255,
255));
//返回角度結果
returnatan2(eigen_vecs[
0].y, eigen_vecs[
0].x);
}
結果展示:
感謝關注,希望有所幫助。
此外,特別感謝:
提供的這個gif錄屏軟體,非常好用。
目前方向:影象拼接融合、影象識別 ****:[email protected]
雜談(如何獲得物體的尺寸)(11)
獲得物體的尺寸有幾種,可以通過render元件 meshfiter元件或者是通過給物體新增碰撞器來獲取到物體的尺寸,具體方法是 一 gameobject.renderer.bound.x 這個方法的具體返回值是meshrenderer這個組建的模型尺寸 二 gameobject.getcompone...
U3D子物體和父物體的獲得及建立子物體
獲得父物體的方法是,通過transform類中的乙個函式parent獲得該父物體的transform資訊 因為該函式的返回值是transform型別 再通過transform類的gameobject函式獲得該物體,從而可以控制物體了。如果是建立子物體的話,只需要建立後設定物體的父物體就好了,獲取子物...
平面物體檢測的主要演算法流程
主要用於使用 features2d 和 calib3d 模組來檢測場景中的已知平面物體。步驟 1 讀入兩幅影象 mat img1 imread argv 1 cv load image grayscale mat img2 imread argv 2 cv load image grayscale ...