【基於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)





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章