opencv绘制基本形状的二值图像

        二值图像的创建很容易,本文绘制有阶跃梯度的边缘图像,为后面的实验做准备,黑色变白色以及白色变黑色便会产生明显边缘。

本文还绘制了倾斜的边缘。

首先,创建左右黑白二值图像:

#include<iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat src(Size(200,200),CV_8UC1,Scalar::all(0));
	//src(Range::all(),Range(0,100))=255;
	src(Range::all(),Range(101,200))=255;
	imshow("src",src);
	waitKey(0);
	system("pause");
	return 0;
}

                              fig.1

 
                                 fig.2

然后,创建上下黑白二值图像:

#include<iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat src(Size(200,200),CV_8UC1,Scalar::all(0));
	//src(Range(101,200),Range::all())=255;
	src(Range(0,100),Range::all())=255;
	imshow("src",src);
	waitKey(0);
	system("pause");
	return 0;
}



                             fig.3


                           fig.4

再然后绘制斜对角线图像:

#include<iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat src(Size(200,200),CV_8UC1,Scalar::all(0));
	int center_x=src.cols/2;
	int center_y=src.rows/2;
	const double k=1.0;
	for (int j=0;j<src.rows;j++)
	{
		int y=k*(j-center_x)+center_y;
		//src(Range(0,j),Range(y,200))=255;
		src(Range(j,200),Range(0,y))=255;
	}
	imshow("src",src);
	waitKey(0);
	system("pause");
	return 0;
}



                        fig.5


                        fig.6

改变起始点斜对角线:

#include<iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat src(Size(200,200),CV_8UC1,Scalar::all(0));
	int center_x=src.cols/2;
	int center_y=src.rows/2;
	const double k=0.5;
	for (int j=0;j<src.rows;j++)
	{
		int y=k*(j-center_x)+center_y;
		//src(Range(0,j+1),Range(y,200))=255;    
		src(Range(j,200),Range(0,y))=255;
	}
	imshow("src",src);
	imwrite("13.bmp",src);
	waitKey(0);
	system("pause");
	return 0;
}

                        fig.7

                       fig.8

相反方向:

#include<iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat src(Size(200,200),CV_8UC1,Scalar::all(0));
	int center_x=src.cols/2;
	int center_y=src.rows/2;
	const double k=-0.5;
	for (int j=0;j<src.rows;j++)
	{
		int y=k*(j-center_x)+center_y;
		src(Range(0,j+1),Range(0,y))=255;    
		//src(Range(j,200),Range(y,200))=255;
	}
	imshow("src",src);
	imwrite("10.bmp",src);
	waitKey(0);
	system("pause");
	return 0;
}

                        fig.9

                        fig.10

    到此,基本的二值图像绘制完毕

    模糊边缘待补充~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值