使用opencv进行HSV颜色提取
void matchFun::getHSV_black(const Mat image ,Mat& hsvMask)
{
Mat orginimage = image.clone();
Mat hsvImage;
vector<Mat> hsvChannel;
cvtColor(orginimage, hsvImage, CV_BGR2HSV);
split(hsvImage, hsvChannel);
Mat hueMask,saturationMask ,valueMask;
inRange(hsvChannel[0],0,180,hueMask);
inRange(hsvChannel[1],0, 70, saturationMask);
inRange(hsvChannel[2],0,255,valueMask);
hsvMask = (hueMask & saturationMask) & valueMask;
}
基于opencv使用pca计算轮廓主方向
cv::Mat data_pts=cv::Mat(contours_out.at(index).size(),2,CV_64FC1);
for (int i = 0; i < data_pts.rows; i++)
{
data_pts.at<double>(i,0) = contours_out.at(index).at(i).x;
data_pts.at<double>(i,1) = contours_out.at(index).at(i).y;
}
cv::PCA pca_analysis(data_pts,cv::Mat(),CV_PCA_DATA_AS_ROW);
cv::Point pos=cv::Point2f(pca_analysis.mean.at<double>(0,0), pca_analysis.mean.at<double>(0,1));
std::vector<cv::Point2d> eigen_vecs(2);
std::vector<double> eigen_val(2);
for (int i = 0; i < 2; ++i)
{
eigen_vecs[i] = cv::Point2d(pca_analysis.eigenvectors.at<double>(i, 0),
pca_analysis.eigenvectors.at<double>(i, 1));
eigen_val[i] = pca_analysis.eigenvalues.at<double>(i,0);
}
A=B=C=0;
A=eigen_vecs[0].y;
B=- eigen_vecs[0].x;
C= eigen_vecs[0].x * pos.y - eigen_vecs[0].y * pos.x;
sort(contours_out.at(index).begin(),contours_out.at(index).end(),comp);
基于opencv使用gabor滤波器
cv::Mat kernel=cv::getGaborKernel(cv::Size(3,3),3,90*3.14/180.0,8,0.5);
cv::filter2D(adaptiveMask,adaptiveMask,-1,kernel);