OPENCV盲打手撕代码默写练习-矩阵操作+简单二值化找轮廓

#include <bits/stdc++.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
Mat src1,ROI,src2,dst,tmp;
int now_val=50;
void call_back(int,void*){
    double percent=(double)now_val/100;
    addWeighted(src1(Rect(0,0,300,300)),percent,src2(Rect(0,0,300,300)),1-percent,0,dst);
}
int main(  ){
    //1.读入图1拉出左上角100X100部分感兴趣区域遍历置绿色
    src1=imread("1.jpg");
    ROI=src1(Rect(0,0,100,100));
    for(int i=0;i<ROI.rows;i++)
        for(int j=0;j<ROI.cols;j++)
            for(int k=0;k<3;k++){
                ROI.at<Vec3b>(i,j)[k]=(k==1?255:0);
                ROI.at<Vec3b>(i,j)[k]=(k==1?255:0);
                ROI.at<Vec3b>(i,j)[k]=(k==1?255:0);
            }
    namedWindow("first");
    imshow("first",src1);
    //2.读入图2分离通道置距右下界大于100部分绿色合并通道
    src2=imread("2.jpg");
    vector<Mat> channel;
    split(src2,channel);
    for(int i=0;i<channel.size();i++)
        for(int j=0;j<channel[i].rows;j++)
            for(int k=0;k<channel[i].cols;k++)
                channel[i].at<uchar>(j,k)=(i==0?255:0);
    merge(channel,src2);
    namedWindow("second");
    imshow("second",src2);
    //3.滑动条控制两图左上角500X500像素合成区域显示
    namedWindow("third");
    addWeighted(src1(Rect(0,0,300,300)),0.5,src2(Rect(0,0,300,300)),0.5,0,dst);
    imshow("third",dst);
    createTrackbar("mix","third",&now_val,100,call_back);
    //4.复制输出图并画一个圆形和矩形
    dst.copyTo(tmp);
    line(tmp,Point2d(0,0),Point2d(200,200),Scalar(0,0,255));
    circle(tmp,Point2d(250,250),100,Scalar(0,255,255));
    namedWindow("fourth");
    imshow("fourth",tmp);
    //5.应用>进行二值化
    Mat srcImage=imread("head.jpg", 0);	imshow("原始图",srcImage);
	srcImage = srcImage > 119;imshow( "取阈值后的原始图", srcImage );//一个符号解决二值化
	vector<vector<Point> > contours;
	vector<Vec4i> hierarchy;
	findContours( srcImage,contours,hierarchy,RETR_CCOMP,CHAIN_APPROX_SIMPLE);//关键代码
	Mat dstImage = Mat::zeros(srcImage.rows, srcImage.cols, CV_8UC3);
	for(int index = 0; index >= 0; index = hierarchy[index][0] ){
		Scalar color( rand()&255, rand()&255, rand()&255 );
		drawContours( dstImage, contours, index, color, FILLED, 8, hierarchy );//关键代码
	}
	imshow( "轮廓图", dstImage );
    waitKey(0);
	return(0);
}

猜你喜欢

转载自blog.csdn.net/cj1064789374/article/details/88771233