opencv学习笔记(4)----图像分割

来源:互联网 发布:围巾 知乎 男士 编辑:程序博客网 时间:2024/06/05 14:31

任务:

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;}


合成效果图:




0 0