標頭檔案:
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include #include #include #include #define pi 3.1415926
using namespace cv;
using namespace std;
濾波函式:
void removesmallregion(mat& src, mat& dst, int arealimit, int areatop, int checkmode, int neihbormode)
}} }
else
}} }
vectorneihborpos; //記錄鄰域點位置
neihborpos.push_back(point2i(-1, 0));
neihborpos.push_back(point2i(1, 0));
neihborpos.push_back(point2i(0, -1));
neihborpos.push_back(point2i(0, 1));
if (neihbormode == 1)}}
}if ((int(growbuffer.size())>arealimit)&(int(growbuffer.size())(curry, currx) += checkresult;
}//********結束該點處的檢查**********
}} }
checkmode = 255 * (1 - checkmode);
//開始反轉面積過小的區域
for (int i = 0; i < src.rows; ++i)
else if (ilabel[j] == 3)
}} //cout主函式:
在獲得的菸草區域內選取任意一點,以該點畫圓,半徑逐步增加,設定條件(在該圓中的菸草區域/圓的面積《某閾值),當不符合時,將圓進行空白區域中心的反向半徑方向移動,直到滿足條件(設定最大移動範圍);
以此方法,在寬度方向上獲得最大內接圓,菸草寬度即為圓的直徑;
相同方法取多點,分別檢測寬度(閾值),最後計算均值;
int main()
// }
//}//circle(img_by, center, maxdist, scalar(0),-1);
//imshow("zc", img_gray);
//2for (int q = 0; q < contours.size(); q++)
}double result = baidian_num / (pi*radius*radius);//計算佔比
if (result < resulit_limit)//移動圓心位置
else if ((result > resulit_limit) && (result < 1))
else if (result == 1)
continue;//半徑自增
}radius_all += radius;
}cout << radius_all / 4.0 * 2.0 << " pixels" << endl;
} }system("pause");
}
測試影象:
執行結果:
如何動態測量字型寬度
前幾天由於專案需要,需要把太長的字元省略顯示,滑鼠放上去的時候顯示出來,然後去找了個外掛程式,但是完成之後發現字串沒有出現省略號時,滑鼠放上去也會顯示,這與需求不符,於是想到使用字串長度,也就是字元的個數乘以字型大小和包裹字串的元素相比,發現不對,因為字型的大小並不等於字型寬度,而是等於字型高度,中...
opencv 物體尺寸測量
1 原圖,已知左上角正方形的實際大小為 2cm 2 轉為灰度圖 高斯模糊 3 邊緣檢測 edged cv2.canny blur,50,100 開運算 4 根據左上角參考物體,計算單位長度中的畫素個數 pixel per cm dist in pixel dist in cm5 計算物體輪廓的最小外...
不規則物體形狀匹配綜述
不規則物體形狀匹配綜述 物體識別是計算機視覺應用的一項基本任務。識別通常基於目標物體的灰度資訊 顏色資訊或形狀資訊。物體識別的目的就是要找到乙個包含可以區分不同目標物體的有效資訊的描述。由於要識別的物體是事先知道的,所以目標物體的幾何特徵可以被直接應用到識別任務中。不規則物體的形狀匹配是一種有效的利...