雅荷心语博客
雅荷心语
心之所向便是光
  • 首页
  • 前端之旅
  • 后端之路
  • 软件工具
  • 心灵鸡汤
  • 心路历程
  • 视频资料
  • 关于我们
    • 关于我
    • 关于我
  • 微信平台
    • 业务合作
  • 首页
  • 前端之旅
  • 后端之路
  • 软件工具
  • 心灵鸡汤
  • 心路历程
  • 视频资料
  • 关于我们
    • 关于我
    • 关于我
  • 微信平台
    • 业务合作
  • 关注本站
    • 微信
    • 微博
    • 腾讯微博
    • Twitter
    • Facebook
    • RSS订阅
Hi, 请登录     我要注册     找回密码

nodejs 使用 opencv 探索

2024-04-30 分类:前端之旅 阅读(756) 评论(0)

首先需要在电脑上安装 opencv

brew install opencv

如何验证是否安装成功

brew info opencv

———-

brew info opencv
==> opencv: stable 4.9.0 (bottled)
Open source computer vision library
https://opencv.org/
/usr/local/Cellar/opencv/4.9.0_7 (971 files, 248.1MB) *
Poured from bottle using the formulae.brew.sh API on 2024-04-29 at 17:42:56
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/opencv.rb
License: Apache-2.0
==> Dependencies
Build: cmake ✘, pkg-config ✔, python-setuptools ✘
Required: ceres-solver ✔, eigen ✔, ffmpeg@6 ✔, glog ✔, harfbuzz ✔, jpeg-turbo ✔, libpng ✔, libtiff ✔, numpy ✔, openblas ✔, openexr ✔, openjpeg ✔, openvino ✔, protobuf ✔, python@3.12 ✔, tbb ✔, vtk ✔, webp ✔
==> Analytics
install: 14,197 (30 days), 38,891 (90 days), 139,342 (365 days)
install-on-request: 13,479 (30 days), 36,681 (90 days), 130,415 (365 days)
build-error: 44 (30 days)

————

然后安装 nodejs 包,

我使用 nodejs 16.20 一直安装不成功, 后来改为 14.17.6 安装成功

npm install –save –build-from-source opencv4nodejs

需要等待编译, 耗时比较久, nodejs 安装失败了~~使用 python 也可以, 比较简单,

pip install opencv-python

首先, 我们使用 python 的 opencv, 然后简单对图片进行锐化和降噪!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import os
import random
import string
import sys
import json
import os
 
def process_image(image_name, saturation_factor = 1.5, sharpen_factor = 9, output_filename = 'output.jpg'):
    """
    处理图像:增加饱和度、去噪并锐化图像。
    参数:
    - image_name: 图像文件名,包括路径。
    - saturation_factor: 饱和度增加因子,用于调整图像的饱和度。
    - sharpen_factor: 锐化因子,用于调整图像的锐化程度。
 
    返回值:
    无。函数将处理后的图像显示在窗口中。
    """
    # 读取图像文件
    image = cv2.imread(image_name)
 
    # 将图像从 BGR 转换为 HSV 并增加饱和度
    image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    # 分离 HSV 图像的通道
    h, s, v = cv2.split(image_hsv)
    # 根据饱和度因子调整饱和度
    s = np.clip(s * saturation_factor, 0, 255)
    image_hsv[:,:,1] = s
    # 将图像从 HSV 转换回 BGR
    image = cv2.cvtColor(image_hsv, cv2.COLOR_HSV2BGR)
 
    # 使用高斯模糊对图像进行去噪处理
    image_blur = cv2.GaussianBlur(image, (5, 5), 0)
    # 应用锐化 kernel 对图像进行锐化处理
    kernel = np.array(
        [[-1, -1, -1],
        [-1, sharpen_factor, -1],
        [-1, -1, -1]]
    )
    image_sharpened = cv2.filter2D(image_blur, -1, kernel)
    # 显示处理后的图像
    # cv2.imshow('处理后的图片', image_sharpened)
    # cv2.waitKey(0)
    # cv2.destroyAllWindows()
     # 保存处理后的图片
   # 创建 output 目录
    os.makedirs('output', exist_ok=True)
    # 生成随机文件名
    def random_string(length):
        letters = string.ascii_letters
        return ''.join(random.choice(letters) for i in range(length))
    output_filename = 'output/'+ random_string(8) +'.jpg'
    # 保存处理后的图片
    cv2.imwrite(output_filename, image_sharpened);
    json_data = json.dumps({
        "output": output_filename,
        "full": os.path.abspath(output_filename)
    })
 
    return json_data;
 
 
 
# 调用 process_image 函数
if __name__ == "__main__":
    img = sys.argv[1]
    saturation = sys.argv[2]
    sharpen =    sys.argv[3]
    result = process_image(img, float(saturation), int(sharpen))
    print(result)

处理完成了我们要使用 js 来调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const { spawn } = require('child_process');
 
/**调用Python脚本的函数
* @param {*} saturation 饱和度增加因子,用于调整图像的饱和度。
* @param {*} sharpen 锐化因子,用于调整图像的锐化程度。
* @returns 返回文件的路径
*/
function callPythonFunction(img, saturation, sharpen) {
  return new Promise(function (resolve, reject) {
    const pythonScript = 'cv.py'; // 替换为您的Python脚本文件名
    const pythonProcess = spawn('python3', [pythonScript, img.toString(),saturation, sharpen]);
    pythonProcess.stdout.on('data', (data) => {
      const output = JSON.parse(data.toString().trim());
      console.log(`处理后的图片路径:`, output);
      resolve(output);
    });
    pythonProcess.stderr.on('data', (data) => {
      console.error(data.toString());
      reject();
    });
  })
}
 
// 调用Python函数并传入参数
callPythonFunction('77.jpg', '1.5', '9').then(res => {
  console.log('======最终处理完的文件========', res);
});

python 开发的东西, 使用其他语言调用还是很简单的!

1
2
3
4
5
6
7
8
9
10
ZBMAC-df4b49abc opencv % node index.js
处理后的图片路径: {
  output: 'output/YpWZtyOj.jpg',
  full: '/Users/xxx/Desktop/jd/demoDir/opencv/output/YpWZtyOj.jpg'
}
======最终处理完的文件======== {
  output: 'output/YpWZtyOj.jpg',
  full: '/Users/xxx/Desktop/jd/demoDir/opencv/output/YpWZtyOj.jpg'
}
ZBMAC-df4b49abc opencv %

 

分享到:更多 ()

相关推荐

  • AI 编辑器 cursor 如何禁止自动更新
  • AI 编辑器 cursor 工具栏改成和 vscode 一样的左侧 竖向展示
  • nodejs 脚本打包为可执行文件
  • 初学 python 笔记
  • nodejs 同时运行多个脚本
  • 让你的照片动起来
  • vue工程项目动态加载umd.js实践
  • 使用 shell 检测目标服务器是否异常
关于我

小天明 北京·朝阳 前端搬砖工程师

碎碎念):(来自公众号)

热门文章

  • 踩坑记录——iphone上safari开启隐身模式时localStorage变为只读-雅荷心语博客踩坑记录——iphone上safari开启隐身模式时localStorage变为只读2017-02-21评论(4)
  • 程序员是怎样一群人-雅荷心语博客程序员是怎样一群人2015-12-08评论(3)
  • 百度你个大毒瘤 - 吐糟博客这几天打不开事情-雅荷心语博客百度你个大毒瘤 – 吐糟博客这几天打不开事情2015-12-28评论(2)
  • PHP 非对称加密 openssl 加密及解密方法-雅荷心语博客PHP 非对称加密 openssl 加密及解密方法2016-05-17评论(2)
  • PHPStorm10 下载安装破解汉化-雅荷心语博客PHPStorm10 下载安装破解汉化2015-12-15评论(2)
2025年7月
一 二 三 四 五 六 日
« 六    
 123456
78910111213
14151617181920
21222324252627
28293031  

最新评论

  • 前端小武 8年前 (2017-04-06)说:
    我看到了layer
  • 丁艳平 8年前 (2017-03-03)说:
  • Dawn 9年前 (2016-09-16)说:
    call_user_func_array最后的例子是错哦,你用bc方法去调用类里 另外一个方法就知道问题所在了。情况1.调用非静态方法 第一个参数应该传[类的实例,调用方法] (既然有类实例了直接-&
  • Dawn 9年前 (2016-06-21)说:
    tp框架设置了全局捕获异常的,这也没什么。坑的是 他捕获了异常。然后全部返回404。。。不知道的 还以为自己网站被删除了
  • Dawn 9年前 (2016-05-17)说:
    构造函数里的判断 用异常机制可能更好一些

其他类型

  • 芊云全景
  • 配音兔AI配音神器

博客类型

  • 芊云全景
  • 配音兔AI配音神器

左邻右舍

  • 易水寒
  • 楼教主
  • 芊云全景
  • 贤心
  • 配音兔AI配音神器

雅荷心语博客 -心之所向便是光

联系我们关于我们

© 2025 雅荷心语博客   网站地图