版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Leonis_v/article/details/54767077
任务:
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;}
合成效果图: