几个OPENCV常用算法

 1、常用算法寻找边界

std::vector<std::vector<cv::Point>> contours;

findContours( imgLast, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
		
cv::Mat imgMask( matBrokeRoi.size(), CV_8UC1, cv::Scalar(0) );

for ( unsigned int i=0; i < contours.size(); i++ )
{	

     double targetArea = contourArea(contours[i]);
     cv::Rect rect = cv::boundingRect(contours[i]);
     drawContours(imgMask, contours, (int)i, cv::Scalar::all(255), -1, 8);
}

 2、点中寻找最小包围圆形

Point2f center;
float radius;
minEnclosingCircle(points, center, radius);

3.包含点的 最小矩形

rect = minAreaRect(InputArray points)

4.与四边平行的正矩形

Rect boundingRect(InputArray points)

5.自定义卷积

#include <opencv2/opencv.hpp>
int main ()
{	
	cv::Mat imgSrc,imgGrad;
	imgSrc=cv::imread("12.jpg");

	cv::Mat fkernel = cv::Mat(2, 1, CV_32FC1, cv::Scalar(0) );

	fkernel.at<float>(0,0) =  -1;
	fkernel.at<float>(1,0) = 1;
	//Filter_kernel_Vert.at<float>(2,0) =  1;

	cv::resize( imgSrc, imgSrc, cv::Size( imgSrc.cols / 2, imgSrc.rows / 2 ) );
	cv::filter2D( imgSrc, imgGrad, imgSrc.depth(), fkernel  );
	cv::imshow("temp2",imgGrad);
	cv::waitKey(0);
	return 0;
}

6、膨胀 与腐蚀

cv::Mat KerForCannyEro = cv::Mat(3, 9, CV_8UC1, cv::Scalar(1) );
cv::dilate( matCanny, matCannyDilate, KerForCannyEro );
cv::erode(  matCanny, matCannyDilate, KerForCannyEro )

7、翻转

cv::flip(imgSrc,imgOut,1);
发布了19 篇原创文章 · 获赞 28 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/TYtangyan/article/details/85602517