1. 程式人生 > >VS2017下OpenCV 64位配置和ROI區域影象疊加&初級影象混合

VS2017下OpenCV 64位配置和ROI區域影象疊加&初級影象混合

VS2017配置

VS2017下載社群版地址:https://visualstudio.microsoft.com/zh-hans/downloads/
OpenCV下載地址:https://opencv.org/releases.html
設定包含目錄和庫目錄,我的OpenCV版本是3.4.3,安裝目錄是D:\Program Files
設定包含目錄和庫目錄
包含目錄就是openVC安裝目錄下的D:\Program Files\opencv\build\includeD:\Program Files\opencv\build\include\opencvD:\Program Files\opencv\build\include\opencv2


包含目錄

庫目錄就是openVC安裝目錄下的D:\Program Files\opencv\build\x64\vc15\lib:
庫目錄

設定連結器附加依賴項,debug模式是opencv_world343d.lib,release模式是opencv_world343.lib
設定連結器附加依賴項

把openCV的安裝目錄下的D:\Program Files\opencv\build\x64\vc15\bin加入PATH。

ROI區域影象疊加&初級影象混合

新建一個專案,Windows控制檯應用程式。

#include "pch.h"
#include<iostream>
#include
<opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp> //-----------------------------------【名稱空間宣告部分】--------------------------------------- // 描述:包含程式所使用的名稱空間 //-----------------------------------------------------------------------------------------------
using namespace cv; using namespace std; //-----------------------------------【全域性函式宣告部分】-------------------------------------- // 描述:全域性函式宣告 //----------------------------------------------------------------------------------------------- bool ROI_AddImage(); bool LinearBlending(); bool ROI_LinearBlending(); //-----------------------------------【main( )函式】-------------------------------------------- // 描述:控制檯應用程式的入口函式,我們的程式從這裡開始 //----------------------------------------------------------------------------------------------- int main() { if (ROI_AddImage() && LinearBlending() && ROI_LinearBlending()) { cout << endl << "請檢視影象! : )"; } waitKey(0); return 0; } //----------------------------------【ROI_AddImage( )函式】---------------------------------- // 函式名:ROI_AddImage() // 描述:利用感興趣區域ROI實現影象疊加 //---------------------------------------------------------------------------------------------- bool ROI_AddImage() { //【1】讀入影象 Mat srcImage1 = imread("jinan.jpg"); Mat logoImage = imread("jinan_logo.jpg"); if (!srcImage1.data) { printf("讀取srcImage1錯誤\n"); return false; } if (!logoImage.data) { printf("讀取logoImage錯誤\n"); return false; } //【2】定義一個Mat型別並給其設定ROI區域 Mat imageROI = srcImage1(Rect(200, 250, logoImage.cols, logoImage.rows)); //【3】載入掩模(必須是灰度圖) Mat mask = imread("jinan_logo.jpg", 0); //【4】將掩膜拷貝到ROI logoImage.copyTo(imageROI, mask); //【5】顯示結果 namedWindow("<1>利用ROI實現影象疊加示例視窗"); imshow("<1>利用ROI實現影象疊加示例視窗", srcImage1); return true; } //---------------------------------【LinearBlending()函式】------------------------------------- // 函式名:LinearBlending() // 描述:利用cv::addWeighted()函式實現影象線性混合 //-------------------------------------------------------------------------------------------- bool LinearBlending() { //【0】定義一些區域性變數 double alphaValue = 0.5; double betaValue; Mat srcImage2, srcImage3, dstImage; //【1】讀取影象 ( 兩幅圖片需為同樣的型別和尺寸 ) srcImage2 = imread("mogu.jpg"); srcImage3 = imread("rain.jpg"); if (!srcImage2.data) { printf("讀取srcImage2錯誤\n"); return false; } if (!srcImage3.data) { printf("讀取srcImage3錯誤\n"); return false; } //【2】進行影象混合加權操作 betaValue = (1.0 - alphaValue); addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage); //【3】建立並顯示原圖視窗 namedWindow("<2>線性混合示例視窗【原圖】", 1); imshow("<2>線性混合示例視窗【原圖】", srcImage2); namedWindow("<3>線性混合示例視窗【效果圖】", 1); imshow("<3>線性混合示例視窗【效果圖】", dstImage); return true; } //---------------------------------【ROI_LinearBlending()】------------------------------------- // 函式名:ROI_LinearBlending() // 描述:線性混合實現函式,指定區域線性影象混合.利用cv::addWeighted()函式結合定義 // 感興趣區域ROI,實現自定義區域的線性混合 //-------------------------------------------------------------------------------------------- bool ROI_LinearBlending() { //【1】讀取影象 Mat srcImage4 = imread("jinan.jpg", 1); Mat logoImage = imread("jinan_logo.jpg"); if (!srcImage4.data) { printf("讀取srcImage4錯誤\n"); return false; } if (!logoImage.data) { printf("讀取logoImage錯誤\n"); return false; } //【2】定義一個Mat型別並給其設定ROI區域 Mat imageROI; //方法一 imageROI = srcImage4(Rect(200, 250, logoImage.cols, logoImage.rows)); //方法二 //imageROI=srcImage4(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols)); //【3】將logo加到原圖上 addWeighted(imageROI, 0.5, logoImage, 0.3, 0., imageROI); //【4】顯示結果 namedWindow("<4>區域線性影象混合示例視窗"); imshow("<4>區域線性影象混合示例視窗", srcImage4); return true; }

執行效果:
效果