任務:
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;}
合成效果圖: