学习opencv3--第五章答案

1.

#include 
#include 

using namespace std;

int main()
{
	cv::Mat m(100, 100, CV_8UC3);
	m = 0;
	//画个圆
	cv::circle(m, cv::Point(50, 50), 20, cv::Scalar(255, 0, 0));
	cv::namedWindow("circle", cv::WINDOW_AUTOSIZE);
	cv::imshow("circle", m);
	cv::waitKey(0);
	return 0;
}

2.

#include 
#include 

using namespace std;

int main()
{
	cv::Mat m(100, 100, CV_8UC3);
	m = 0;
	cv::Scalar color = cv::Scalar(0, 255, 0);
	for (int i = 20; i <= 40; i++)
	{
		for (int j = 5; j <= 20; j++)
		{
			m.at(i, j)[1] = 255;
		}
	}
	cv::namedWindow("output", cv::WINDOW_AUTOSIZE);
	cv::imshow("output", m);
	cv::waitKey(0);
	return 0;
}

3.

#include 
#include 

using namespace std;

int main()
{
	cv::Mat m(100, 100, CV_8UC3);
	m = 0;
	for (int i = 20; i <= 40; i++)
	{
		for (int j = 5; j <= 20; j++)
		{
			m.ptr(i, j)->val[1] = 255;
		}
	}
	cv::namedWindow("output", cv::WINDOW_AUTOSIZE);
	cv::imshow("output", m);
	cv::waitKey(0);
	return 0;
}

4.

#include 
#include 

using namespace std;

int main(int argc, const char** argv)
{
	cv::Mat m(210, 210, CV_8UC1);
	m = 0;
	for (int i = 1; i < 11; i++)
	{
		cv::Mat mask(210 - 20 * i, 210 - 20 * i, CV_8UC1);
		mask = 1;
		cv::Rect rest(10 * i, 10 * i, 210 - 20 * i, 210 - 20 * i);//定义一个框
		cv::Mat tmp = m(rest);//这个tmp是个引用
		tmp.setTo((i + 1) * 20);//setTo能进行值的设置
	}
	cv::namedWindow("output", cv::WINDOW_AUTOSIZE);
	cv::imshow("output", m);

	cv::waitKey(0);
	return 0;
}

5.

#include 
#include 

using namespace std;

int main(int argc, const char** argv)
{
	cv::Mat src;
	src = cv::imread("C:/Users/duoduoda/Desktop/dog.jpg");
	cv::Rect rect1(5, 10, 20, 30);
	cv::Rect rect2(50, 60, 20, 30);
	cv::Mat tmp1 = src(rect1);
	cv::Mat tmp2 = src(rect2);
	cv::bitwise_not(tmp1,tmp1);
	cv::bitwise_not(tmp2, tmp2);
	cv::imshow("output",src);
	cv::waitKey(0);
	return 0;
}

6.

#include 
#include 

using namespace std;

int main(int argc, const char** argv)
{
	cv::Mat src;
	src = cv::imread("C:/Users/duoduoda/Desktop/dog.jpg");
	vector b_g_r;
	cv::split(src, b_g_r);
	cv::imshow("input",src);
	//a.
	cv::imshow("output", b_g_r[1]);
	//b.
	cv::Mat clone1 = b_g_r[1].clone();
	cv::Mat clone2 = b_g_r[1].clone();
	//c.
	double maxNum, minNum;
	cv::minMaxLoc(b_g_r[1] ,&minNum, &maxNum);
	cout << "maxNum:" << maxNum << "   " << "minNum:" << minNum << endl;
	//d.
	uchar thresh = (uchar)(maxNum - minNum) / 2;
	clone1 = (uchar)(thresh);
	cv::imshow("clone1:", clone1);
	//e.
	clone2 = 0;
	cv::compare(b_g_r[1], clone1, clone2, cv::CMP_GE);
	cv::imshow("clone2:", clone2);
	//f.
	cv::subtract(b_g_r[1], thresh / 2, b_g_r[1], clone2);
	cv::imshow("substract:", clone2);
	cv::waitKey(0);
	return 0;
}

 

你可能感兴趣的:(opencv)