?
目录
图像读取及显示
图像分离通道显示
图像读取及显示 //第一个例子:显示图像void loadImage() {Mat image, grayImage;/*常用参数:IMREAD_UNCHANGED = -1, return the loaded image as is (with alpha channel, otherwise it gets cropped).IMREAD_GRAYSCALE = 0, always convert image to the single channel grayscale image (codec internal conversion).IMREAD_COLOR = 1, always convert image to the 3 channel BGR color image.IMREAD_ANYDEPTH = 2, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.IMREAD_ANYCOLOR = 4, the image is read in any possible color format.*///读取图像image = imread(“dog.jpg”, IMREAD_UNCHANGED);//判断图像是否有效if (!image.data) {cout << “read image failed.\n” << endl;return;}//创建一个窗口,默认的创建窗口的namedWindow参数为WINDOW_AUTOSIZE…//WINDOW_AUTOSIZE:窗口大小会自动调整以适应所显示的图像,但是不能更改大小//WINDOW_NORMAL:用户可以改变窗口的大小//WINDOW_OPENGL: 窗口创建的时候会支持OpenGLnamedWindow(“SrcImage”, WINDOW_AUTOSIZE);imshow(“SrcImage”, image);//彩色图转为灰度图cvtColor(image, grayImage, COLOR_RGB2GRAY, 0);namedWindow(“GrayImage”, WINDOW_AUTOSIZE);imshow(“GrayImage”, grayImage);cout << “Image Size: ” << image.size << endl;cout << “Original Image Channels: ” << image.channels() << endl;cout << “Gray Image Channels: ” << grayImage.channels() << endl;waitKey(0);}
?
?图像分离通道显示 //实现图像分离-合并,并用图像相减测试void testSplit() {Mat mat1 = imread(“RGB.jpg”, IMREAD_COLOR);if (!mat1.data) {cout << “read image failed.\n” << endl;return;}namedWindow(“orignal”, 1);imshow(“orignal”, mat1);//图像分割 分离通道排列顺序是BGRMat vec[3];split(mat1, vec);imshow(“blue”, vec[0]);imshow(“green”, vec[1]);imshow(“red”, vec[2]);//图像合成,注意:合成顺序也是BGRMat mat2;merge(vec, 3, mat2);imshow(“merge”, mat2);//图像相减Mat mat3;absdiff(mat1, mat2, mat3);imshow(“error”, mat3);waitKey(0);}
实验结果:可以看出分离后再合并的结果与原图像一致,,,需要注意的是分离后图像存储顺序是BGR
设置图像感兴趣区域
? ? ??
//openCV 图像复制与设置感兴趣区域void testImage() {Mat src = imread(“dog.jpg”, IMREAD_COLOR);Mat copySrc1 = src;//只会复制头部和指向像素数据的指针Mat copySrc2 = src.clone();//完全复制Mat copySrc3;src.copyTo(copySrc3);//完全复制imshow(“src”,src);//imshow(“copySrc”,copySrc1);//imshow(“copySrc2”, copySrc2);imshow(“copySrc3”, copySrc3);//设置感兴趣区域Mat getROI = src( Rect(50, 50, 100, 100) );//Rect四个形参分别是:x坐标,y坐标,长,高;注意(x,y)指的是矩形的左上角点imshow(“ROI”, getROI);//标注图像区域rectangle(src, Rect(50, 50, 100, 100), Scalar(255, 0, 0), 2);//2==thicknessimshow(“AddRect”, src);waitKey(0);}
46299297