# 环境
- Python:3.6.5 OpenCV 4.1.2
- C++:OpenCV 4.1.2
- JS:OpenCV 4.5.0
环境搭建可参考:B 站视频
# 知识点
图像保存 — imwrite
- 第一个参数是图像保存路径
- 第二个参数是图像内存对象
色彩空间转换函数 — cvtColor
- COLOR_BGR2GRAY = 6 彩色到灰度
- COLOR_GRAY2BGR = 8 灰度到彩色
- COLOR_BGR2HSV = 40 BGR 到 HSV
- COLOR_HSV2BGR = 54 HSV 到 BGR
# C++ 代码
#ifndef DAY02
#define DAY02
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
void day02() {
Mat src = imread("E:\\_Image\\OpenCVTest\\girl.jpg");
if (src.empty()) {
cout << "could not load image.." << endl;
return;
}
namedWindow("show", WINDOW_AUTOSIZE);
imshow("show", src);
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
namedWindow("gray", WINDOW_AUTOSIZE);
imshow("gray", gray);
imwrite("E:\\_Image\\OpenCVTest\\girl_gray.jpg", gray);
if (gray.type() == CV_8UC1) {
//input image is grayscale
cout << "gray" << endl;
}
else {
//input image is colour
cout << "color" << endl;
}
waitKey(0);
}
#endif // !DAY02
注意事项:
COLOR_GRAY2BGR 要求图像的类型是 CV_8UC1。该函数的原理是将图像的通道变多,但是每个像素点三通道的像素值还是一样!所以即使转换成功,图像依旧是灰色的。
读取图像的 imread () 函数有第二个参数,其默认值是 IMREAD_COLOR ,即将加载的图像总是转换为彩色图像。转换后图像的类型是 CV_8UC3。
# Python 代码
import cv2 as cv | |
# 查看版本 | |
print(cv.__version__) | |
# 读取图像 | |
src = cv.imread("E:/_Image/OpenCVTest/girl.jpg") | |
# 显示图像 | |
cv.imshow("input", src) | |
# 彩色转灰度 | |
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) | |
# 显示图像 | |
cv.imshow("gray", gray) | |
# 保存图像 | |
cv.imwrite("E:/_Image/OpenCVTest/girl_gray.jpg", gray) | |
# 等待键盘输入 | |
cv.waitKey() | |
# 释放内存 | |
cv.destroyAllWindows() |
# JS 代码
// 官方文档链接:https://docs.opencv.org/4.5.0/db/d64/tutorial_js_colorspaces.html | |
const cv = window.cv | |
// 读取图像 | |
const src = cv.imread('imageSrcRaw') | |
// 转换为灰度图 | |
const gray = new cv.Mat() | |
cv.cvtColor(src, gray, cv.COLOR_RGBA2GRAY, 0) | |
// 显示图像 | |
cv.imshow('canvasOutput', gray) | |
//opencv.js 不支持 imwrite 方法 | |
// 销毁所有 mat 释放内存 | |
src.delete() | |
gray.delete() |
注意事项:
opencv.js 不支持 imwrite 方法。仔细想想也可以理解,毕竟是 web 端程序,不可以随意往服务器端保存东西呀
但是,如果看官用的是 opencv4nodejs,它是提供 imwrite 方法的,亲测。这是专门用于服务器端的 opencv,注意我说的是服务器端,而不是 web 端。意思是 opencv4nodejs 可以用于 nodejs 写的服务器端,但是直接在浏览器是无法运行的。具体如何安装 opencv4nodejs 可以看我写的这篇文章:OpenCV-npm 安装 opencv4nodejs(Windows)
官方文档链接:https://docs.opencv.org/4.5.0/db/d64/tutorial_js_colorspaces.html