jashliao 用 VC++ 實現 fanfuhan OpenCV 教學003 ~ opencv-003-圖像對象(Mat)創建與賦值 [圖片拷貝(複製)、建立空白畫布、建立運算濾波器(Filter)]

jashliao 用 VC++ 實現 fanfuhan OpenCV 教學003 ~ opencv-003-圖像對象(Mat)創建與賦值 [圖片拷貝(複製)、建立空白畫布、建立運算濾波器(Filter)]

jashliao 用 VC++ 實現 fanfuhan OpenCV 教學003 ~ opencv-003-圖像對象(Mat)創建與賦值 [圖片拷貝(複製)、建立空白畫布、建立運算濾波器(Filter)]


資料來源: https://fanfuhan.github.io/

https://fanfuhan.github.io/2019/03/21/opencv-003/

GITHUB:https://github.com/jash-git/fanfuhan_ML_OpenCV

https://github.com/jash-git/jashliao-implements-FANFUHAN-OPENCV-with-VC


★前言:

★主題:
    OPENCV中使用『Mat型態變數』實作圖片拷貝(複製)、建立空白畫布、建立運算遮罩(mask)


C++

// VC_FANFUHAN_OPENCV003.cpp : 定義主控台應用程式的進入點。
//

#include "stdafx.h"
/*
// Debug | x32
通用屬性
| C/C++
|	| 一般
|		| 其他 Include 目錄 -> C:\opencv\build\include
|
| 連結器
| 	|一一般
|		|  其他程式庫目錄 -> C:\opencv\build\x64\vc15\lib
|
| 	|一輸入
|		| 其他相依性 -> opencv_world411d.lib;%(AdditionalDependencies)

// Releas | x64
組態屬性
| C/C++
|	| 一般
|		| 其他 Include 目錄 -> C:\opencv\build\include
|
| 連結器
| 	|一般
|		| 其他程式庫目錄 -> C:\opencv\build\x64\vc15\lib
|
| 	|一輸入
|		| 其他相依性 -> opencv_world411.lib;%(AdditionalDependencies)

*/

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

void pause()
{
	printf("Press Enter key to continue...");
	fgetc(stdin);
}

int main()
{
	Mat src = imread("../../images/l_hires.jpg");//IDE 測試路徑
	//Mat src = imread("../../../images/l_hires.jpg");//執行檔 測試路徑

	if (src.empty()) {
		cout << "could not load image..." << endl;
		pause();
		return -1;
	}
	else
	{
		// 通过克隆或复制创建图像对象,m1和src指向不同内存块
		Mat m1 = src.clone();
		Mat m2;
		src.copyTo(m2);

		// 赋值法,m3和src指向同一内存块
		Mat m3 = src;
		namedWindow("input");
		imshow("input", m3);

		// 创建空白图像
		Mat m4 = Mat::zeros(src.size(), src.type());
		Mat m5 = Mat::zeros(Size(512, 512), CV_8UC3);
		Mat m6 = Mat::ones(Size(512, 512), CV_8UC3);
		Mat m7 = Mat(Size(512, 512), CV_8UC3,Scalar(255,255,255));//白色畫布
		namedWindow("m4-input(zeros)");
		imshow("m4-input(zeros)", m4);
		namedWindow("m5-Size(512, 512)[zeros]");
		imshow("m5-Size(512, 512)[zeros]", m5);
		namedWindow("m6-Size(512, 512)[ones]");
		imshow("m6-Size(512, 512)[ones]", m6);
		namedWindow("m7-Size(512, 512)[Scalar(255,255,255)]");
		imshow("m7-Size(512, 512)[Scalar(255,255,255)]", m7);

		// kernel: [0, -1, 0
		//          -1, 5, -1
		//          0, -1, 0]
		Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);

		waitKey(0);
	}

	return 0;
} 


Python

import cv2 as cv
import numpy as np

src = cv.imread("../images/liuyifei_1.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)

# 克隆图像
m1 = np.copy(src)

# 赋值
m2 = src
src[100:200,200:300,:] = 255 # 第三维代表图像通道
cv.imshow("m2",m2)

m3 = np.zeros(src.shape, src.dtype)
cv.imshow("m3", m3)

m4 = np.zeros([512,512], np.uint8)
# m4[:,:] =127 try to give gray value 127
cv.imshow("m4", m4)

m5 = np.ones(shape=[512,512,3], dtype=np.uint8)
m5[:,:,0] = 255
cv.imshow("m5", m5)

cv.waitKey(0)
cv.destroyAllWindows()


★結果圖:


★延伸說明/重點回顧:

    OPENCV的(Mat::zeros、Mat::ones)空白畫布預設都是黑底

    OPENCV使用Scalar(255,255,255)建立非黑色底(白色)畫布

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *