【基于C++和Python的Opencv3学习笔记之图像载入、显示和保存】

最近在学习毛星云的《opencv3编程入门》,书中给出了基于C++的opencv3的编程实现,在学习过程中有一些自己的心得和体会,并分别给出了C++和Python的实现代码。

图像的载入:imread()函数

Imread()函数用于读取文件中的图片到opencv中,opencv中imread()函数的原型如下:

Mat imread(const string& filename, int flags=1);

第一个参数filename是我们需要载入的图片的路径名,第二个参数flags是载入标识,用于指定加载图像的颜色类型,默认值为1。若flag>0,返回三通道的彩色图像,若flag=0,返回灰度图像,flag<0,返回带有透明度alpha通道的图像。


图像的显示:imshow()函数

Imshow()函数用于在指定的窗口显示一幅图像,函数原型如下:

void imshow(const string& winname, InputArray mat);

winname是要显示的窗口的名称,mat是要显示的图像。需要注意的是如果窗口是用WINDOW_AUTOSIZE(默认值)创建的,则图像显示原始大小,否则图像将进行缩放以适合窗口。


窗口的创建:namedWindow()函数

namedWindow()函数用于创建一个窗口,如果只是简单的显示图片,可以直接imread()读取图片,然后imshow()直接指定出窗口名即可,但是如果显示窗口钱就需要用到窗口名,这时候必须先用namedWindow()函数创建出窗口。namedWindow()的函数原型如下:

void namedWindow(const string&winname, int flags=WINDOW_AUTOSIZE);

Winname是我们创建的窗口的名称,flags是窗口标识,可以取以下的值:WINDOW_NORMAL表示用户可以改变窗口的大小;WINDOW_AUTOSIZE表示系统会自动调整大小以适应所显示的图像,用户不能随意更改大小;WINDOW_OPENGL表示窗口创建的时候会支持OpenGL。


图像的保存:imwrite()函数

Imwrite()函数用于将图像保存到指定文件,函数原型为:

void imwrite(const string& filename, InputArray img, const vector<int>  ¶ms=vector<int>());

Filename是保存的文件名,img一般是需要保存的图像,通常是一个Mat类型的图像数据,params是以特定形式保存的参数编码,默认值为vector<int>(),一般情况下不用管这个参数。

简单的代码示例(基于C++)

#include "stdafx.h"
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
	// 图像的载入和显示
	Mat img = imread("lena_color.tiff");
	namedWindow("lena彩色");
	imshow("lena彩色", img);

	
	// 简单的图像混合
	Mat img1 = imread("lena_gray.bmp");
	Mat ROI1, ROI2;
	Mat img2 = Mat::zeros(400, 400, CV_8UC3);
	ROI1 = img(Rect(50, 50, 400, 400));
	ROI2 = img1(Rect(50, 50, 400, 400));
	
	// 两个ROI进行叠加
	addWeighted(ROI1, 0.3, ROI2, 0.5, 0.0, img2);
	
	namedWindow("效果图");
	imshow("效果图", img2);

	// 保存图像
	imwrite("叠加后图像.bmp", img2);
	
	waitKey(0);
	
	return 0;
}


简单的代码示例(基于Python)

# coding=UTF-8
import numpy as np
import cv2

# 图像的载入和显示
img = cv2.imread('lena_color.tiff')
img1 = cv2.imread('lena_gray.bmp')
cv2.namedWindow('lena_color')
cv2.imshow('lena_color', img)

# 简单的图像混合
ROI1 = img[50:450, 50:450]
ROI2 = img1[50:450, 50:450]
img2 = cv2.addWeighted(ROI1, 0.3, ROI2, 0.5, 0.0)
cv2.namedWindow("result")
cv2.imshow("result", img2)

# 图像的保存
cv2.imwrite('result.bmp', img2)
cv2.waitKey(0)





  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值