opencv學習筆記(4)----圖像分割

任務:

1.在“作業素材”中,有一張horse_hw.jpg的圖片,對圖片中做目標分割,生成分割後的圖片(黑白圖)。

2.在horse_hw.jpg圖像內畫一個換色的矩形框,在矩形框內用白色寫上自己的名字。

3.把1和2的兩張圖片上下襬放到圖一個輸出顯示框內。

實驗素材:

操作步驟:

第一步:做目標分割

1.轉灰度圖

2.二值化灰度圖

第二步:畫矩形框,寫文字再圖片上。

1.畫矩形框

2.寫文字在圖片上

第三步:合成圖片

1.生成圖片Mat

2.將兩張圖片一次copy到目標圖片上


完整源代碼:

#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
	//--1.讀入圖片
	cv::Mat image = cv::imread("../roi/horse_hw.jpg");

	//--2.轉換灰度圖
	cv::Mat gray;
	cv::cvtColor(image, gray, CV_RGB2GRAY);

	//--3.二值化灰度圖
	cv::Mat dst;
	cv::threshold(gray, dst, 60, 255, cv::THRESH_BINARY_INV);
	//畫矩形,寫名字
	Point a = Point(0, 20);
	Point center = Point(200, 80);
	rectangle(image, a, center, Scalar(255, 255, 255));
	string name = "flower";
	putText(image, name, Point(20, 60), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255));

	//--4.顯示結果(原圖和結果圖顯示在一起)
	const int width = image.cols;
	const int height = image.rows;
	cv::Mat show_image(cv::Size(width, 2 * height), CV_8UC3);
	//將dst轉換爲3通道,使得show_image和dst通道數一致,或者使用convertTo()函數做操作
	cv::cvtColor(dst, dst, CV_GRAY2RGB);
	//將dst拷貝image指定位置
	dst.copyTo(show_image(cv::Rect(0, 0, width, height)));
	//將image拷貝到顯示圖片指定位置
	image.copyTo(show_image(cv::Rect(0, height, width, height)));
	//顯示
	cv::imshow("show", show_image);
        waitKey(0);
  return 1;}



合成效果圖:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章