jashliao 用 VC++ 實現 fanfuhan OpenCV 教學007 ~ opencv-007-圖像像素之邏輯(AND、OR、XOR、NOT)運算操作 [使用顏色特性,圖片預先處理,藉此凸顯/過濾特徵點]

jashliao 用 VC++ 實現 fanfuhan OpenCV 教學007 ~ opencv-007-圖像像素之邏輯(AND、OR、XOR、NOT)運算操作 [使用顏色特性,圖片預先處理,藉此凸顯/過濾特徵點]

jashliao 用 VC++ 實現 fanfuhan OpenCV 教學007 ~ opencv-007-圖像像素之邏輯(AND、OR、XOR、NOT)運算操作 [使用顏色特性,圖片預先處理,藉此凸顯/過濾特徵點]



資料來源: https://fanfuhan.github.io/
https://fanfuhan.github.io/2019/03/24/opencv-007/


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

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

★前言:

★主題:

    OPENCV提供圖像邏輯運算功能函數,使用者可以利用顏色特性,對圖片進行預先處理,藉此凸顯/過濾特徵點。


    邏輯運算功能函數條列如下:

        bitwise_and(src1, src2, dst1);//進行AND運算
        bitwise_xor(src1, src2, dst2);//XOR運算
        bitwise_or(src1, src2, dst3);//OR運算
        bitwise_not(src, dst);//NOT運算
    


C++

// VC_FANFUHAN_OPENCV001.cpp : 定義主控台應用程式的進入點。
//
/*
// 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 "stdafx.h"
#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()
{
	// create image one, CV_8UC3创建三通道图像
	Mat src1 = Mat::zeros(Size(400, 400), CV_8UC3);
	Rect rect(100, 100, 100, 100);//定義一個矩形
	// Scalar() 参数为BGR三通道值,绿色和红色加起来是黄色
	可可//將矩形範圍填滿黃色
	imshow("input1", src1);

	// create image two
	Mat src2 = Mat::zeros(Size(400, 400), CV_8UC3);
	rect.x = 150;
	rect.y = 150;//移動矩形起始位置
	src2(rect) = Scalar(0, 0, 255);//將矩形範圍填滿紅色
	imshow("input2", src2);

	// 逻辑操作
	Mat dst1, dst2, dst3;
	bitwise_and(src1, src2, dst1);//進行AND運算
	bitwise_xor(src1, src2, dst2);//XOR運算
	bitwise_or(src1, src2, dst3);//OR運算
	imshow("and", dst1);
	imshow("xor", dst2);
	imshow("or", dst3);

	// 演示取反操作
	Mat src = imread("../../images/test1.jpg");
	Mat dst;
	if (src.empty()) {
		cout << "could not load image..." << endl;
		pause();
		return -1;
	}
	else
	{
		imshow("input", src);
		bitwise_not(src, dst);//NOT運算
		imshow("input_not", dst);
	}

	waitKey(0);
	return 0;
}


Python

import cv2 as cv
import numpy as np

# create image one
src1 = np.zeros(shape=[400, 400, 3], dtype=np.uint8)
src1[100:200, 100:200, 1] = 255
src1[100:200, 100:200, 2] = 255
cv.imshow("input1", src1)
# create image two
src2 = np.zeros(shape=[400, 400, 3], dtype=np.uint8)
src2[150:250, 150:250, 2] = 255
cv.imshow("input2", src2)

dst1 = cv.bitwise_and(src1, src2)
dst2 = cv.bitwise_xor(src1, src2)
dst3 = cv.bitwise_or(src1, src2)

cv.imshow("dst1", dst1)
cv.imshow("dst2", dst2)
cv.imshow("dst3", dst3)

src = cv.imread("../images/test1.jpg")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
dst = cv.bitwise_not(src)
cv.imshow("dst", dst)

cv.waitKey(0)
cv.destroyAllWindows()


★結果圖:


★延伸說明/重點回顧:

    OPENCV預設建立的畫布為黑色


    OPENCV內建Rect類別可以標定一個矩形座標範圍


    OPENCV可以利用Rect類別+Scalar函數對特定畫布的特定區域進行顏色指定(上色)


    OPENCV的黑色為Scalar(0,0,0);白色為Scalar(255,255,255)

發表迴響

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