OpenCV4(4)-图像像素读写操作(C++,Python,JS)

基于Trae框架的像素画解析:JS+Python全栈图像处理实践 图像处理是计算机视觉的基础领域,其核心原理在于将图像从像素矩阵转换为可分析的结构化数据。通过颜色量化、连通域分析等关键技术,可以实现对图像内容的识别与结构化,这在自动化设计、游戏素材生成等场景中具有重要价值。本文以像素画解析为具体案例,深入探讨了如何利用JavaScript进行前端交互与数据预处理,并结合Python的OpenCV、Pillow库实现高效的颜色聚类与区域检测算法。通过Trae全栈框架的SOLO模型,有效整合前后端工作流,展示了从图像上传、算法处理到结果可视化的完整工程实践,为轻量级图像分析应 阅读详情

目录

环境

知识点

C++代码

Python代码

JS代码

返回总目录


环境

  • Python:3.6.5 OpenCV 4.1.2
  • C++:OpenCV 4.1.2
  • JS:OpenCV 4.5.0

环境搭建可参考:B站视频

知识点

C++ 中的像素遍历与访问

  • 数组遍历
  • 指针遍历

Python 中的像素遍历与访问

  • 数组遍历

C++代码

#ifndef DAY04
#define DAY04

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

using namespace std;
using namespace cv;

void day04() {

	Mat src = imread("E:\\_Image\\OpenCVTest\\girl.jpg");

	if (src.empty()) {
		cout << "could not load image.." << endl;
		return;
	}

	// 直接读取图像像素
	int height = src.rows;
	int width = src.cols;
	int ch = src.channels();
	for (int row = 0; row < height; row++) {
		// 像素取反
		for (int col = 0; col < width; col++) {
			if (ch == 3) {
				Vec3b bgr = src.at<Vec3b>(row, col);
				bgr[0] = 255 - bgr[0];
				bgr[1] = 255 - bgr[1];
				bgr[2] = 255 - bgr[2];
				src.at<Vec3b>(row, col) = bgr;
			}
			else if (ch == 1) {
				int gray = src.at<uchar>(row, col);
				src.at<uchar>(row, col) = 255 - gray;
			}
		}
	}
	imshow("output", src);

	// 指针读取
	Mat result = Mat::zeros(src.size(), src.type());
	int blue = 0, green = 0, red = 0;
	int gray;
	for (int row = 0; row < height; row++) {
		uchar* curr_row = src.ptr<uchar>(row);
		uchar* result_row = result.ptr<uchar>(row);
		for (int col = 0; col < width; col++) {
			if (ch == 3) {
				blue = *curr_row++;
				green = *curr_row++;
				red = *curr_row++;

				*result_row++ = blue;
				*result_row++ = green;
				*result_row++ = red;
			}
			else if (ch == 1) {
				gray = *curr_row++;
				*result_row++ = gray;
			}
		}
	}
	imshow("result", result);

	waitKey(0);
}

#endif // !DAY04

Python代码

import cv2 as cv
import numpy as np

# 查看版本
print(cv.__version__)

# 读取图像
src = cv.imread("E:/_Image/OpenCVTest/girl.jpg")

# 查看属性
h, w, ch = src.shape
print("h, w, ch", h, w, ch)

# 像素取反
for row in range(h):
    for col in range(w):
        b, g, r = src[row, col]
        b = 255 - b
        g = 255 - g
        r = 255 - r
        src[row, col] = [b, g, r]
cv.imshow("output", src)

# 等待键盘输入
cv.waitKey()

# 释放内存
cv.destroyAllWindows()

JS代码

<template>
  <div>
    <p>图像像素读写</p>
    <p id="status">OpenCV.js is loading...</p>
    <div class="inputoutput">
      <img id="imageSrc" alt="No Image" />
      <div class="caption">imageSrc <input type="file" id="fileInput" name="file" /></div>
    </div>
    <div class="inputoutput">
      <canvas id="canvasOutput"></canvas>
      <div class="caption">canvasOutput</div>
    </div>
  </div>
</template>

<script>
export default {
  name: "day04",
  mounted() {
    this.init();
  },
  methods: {
    init() {
      setTimeout(() => {
        if (window.cv) {
          this.onOpenCvReady(window.cv);
        } else {
          this.init();
        }
      }, 500);
    },
    onOpenCvReady(cv) {
      document.getElementById("status").innerHTML = "OpenCV.js is ready.";
      let imgElement = document.getElementById("imageSrc");
      let inputElement = document.getElementById("fileInput");
      inputElement.addEventListener(
        "change",
        e => {
          imgElement.src = URL.createObjectURL(e.target.files[0]);
        },
        false
      );
      imgElement.onload = function() {
        let src = cv.imread(imgElement);

        // 1. data 取值,获取适用于连续Mat,需用 isContinous()检测是否连续
        // 取(3,4)这个位置的像素
        let row = 3;
        let col = 4;
        let R, G, B, A;
        if (src.isContinuous()) {
          R = src.data[row * src.cols * src.channels() + col * src.channels()];
          G =
            src.data[
              row * src.cols * src.channels() + col * src.channels() + 1
            ];
          B =
            src.data[
              row * src.cols * src.channels() + col * src.channels() + 2
            ];
          A =
            src.data[
              row * src.cols * src.channels() + col * src.channels() + 3
            ];
          console.log(R, G, B, A);
        }

        // 2. at 限制:不能修改
        R = src.ucharAt(row, col * src.channels());
        G = src.ucharAt(row, col * src.channels() + 1);
        B = src.ucharAt(row, col * src.channels() + 2);
        A = src.ucharAt(row, col * src.channels() + 3);
        console.log(R, G, B, A);

        // 3. ptr 一般使用这个,简单方便
        let pixel = src.ucharPtr(row, col);
        R = pixel[0];
        G = pixel[1];
        B = pixel[2];
        A = pixel[3];
        console.log(R, G, B, A);
        // 修改
        pixel[0] = 0;
        pixel[1] = 0;
        pixel[2] = 0;
        pixel[3] = 255;
        console.log(src.ucharPtr(row, col));
        cv.imshow("canvasOutput", src);

        src.delete();
      };
    }
  }
};
</script>

<style lang="scss" scoped>
</style>

官方文档链接:https://docs.opencv.org/4.5.0/de/d06/tutorial_js_basic_ops.html

返回总目录

OpenCV4学习笔记 - 目录

如果这篇文章对您有帮助,欢迎给我的 github项目 点一个⭐ ο(=•ω<=)ρ⌒☆

Python图像差异检测:像素比对、SSIM与直方图三重验证 图像差异检测是计算机视觉中的基础任务,本质是量化两张图像在像素值、结构信息和色彩分布三个维度的偏离程度。其核心原理涵盖逐像素绝对差值计算、基于人类视觉系统建模的结构相似性(SSIM)评估,以及全局统计视角下的直方图距离分析。该技术具备高可复现性与工程鲁棒性,广泛应用于UI自动化测试、医疗影像比对、电商图片版本管理及AIGC生成结果验证等场景。本文聚焦Python生态下OpenCV、NumPy与scikit-image的协同实践,深入解析容差设定、尺寸归一化、色彩空间转换等易被忽略的关键细节,并提供可直接集成 阅读详情

相关推荐

opencv3.3.0.js

opencvjs机器视觉opencvjs文件方便web端引入使用,使用时引入即可,如需使用,下载放到js文件夹下,如果是vue就外部导入下即可

Vue项目中使用opencv.js报错记录

网上关于vue中使用opencv的例子少之又少,无奈之下只能自己琢磨研究一下。开此贴来记录自己的探索过程,希望最后可以顺利完成课题。 一开始是尝试官网的方法,直接引入编译好的opencv.js文件,在index.html里面直接放置官网的例子,然后成功了,特别开心,以为自己已经攻克难关可以开始准备项目了,还跟导师汇报说技术难关已经解决了,然而在我happy了一天晚上回来准备给他应用到vue项目中发现这玩意怎么跟在html文件中不一样呢???因为是前端小白,所以我在网上找了很多方法,试了几个靠谱的,结果最后

m0_49435789的博客 6477

完整的opencvjs(使用最新的OpenCV 4.0.0+)-JavaScript开发

opencvjs完整的opencvjs。(使用最新的OpenCV 4.0.0+)opencv.js官方停止更新。 而且,与上一个正式版本相比,它仍然存在许多错误。 该项目继承自官方的opencv.js。 哪个opencvjs完成opencvjs。(使用最新的OpenCV 4.0.0+)官方opencv.js停止了更新。 而且,与上一个正式版本相比,它仍然存在许多错误。 该项目继承自官方的opencv.js。 这意味着opencv.js中的所有方法都可以在这里工作,并且还可以修复大多数错误。 但是,性能有了很大提高。 具有由本机JS编写的OpenCVJS的功能,这意味着该项目可以直接在浏览器或JS项目中使用,或者node.js OpenCVJS最容易安装

web浏览器页面人脸检测(vue、opencv.js)

opencv.js官方示例代码做了些简单调整。 public目录 index.html <!DOCTYPE html> <html lang=""> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=de.

无聊hyf的专栏 3991

opencv的js版opencv.js

opencv的js版本,编译方法可以见官网https://docs.opencv.org/3.3.1/d4/da1/tutorial_js_setup.html

前端开发 opencvjs

前端开发 opencvjs 该文件是编译好的opencv JavaScript版本,直接下载就可以使用。

Vue安装opencv4nodejs库

vue是前端框架,采用的浏览器端的javascript引擎,而opencv4nodejs是后端框架,用的是nodejs的引擎。先说结论,就是安不上,安上了也用不了,不用费劲了。

C_C666的博客 2120

ROS2 -Jazzy 一步一步(第一步_工作空间以及编译)

文件夹作用特点是否需要手动创建/维护src存放自己写的 ROS 2 包一个 workspace 可以有多个包需要手动创建build保存编译过程中的中间文件每个包生成对应子目录自动生成,可删除install保存编译完成后的功能包每个包有独立子目录,含可执行文件自动生成,可删除log保存编译日志用于查看错误原因、调试自动生成,不需修改colcon是 ROS 2 推荐使用的构建工具自动处理功能包的依赖和编译顺序一条命令就能编译整个工作空间。

jerrykorea的博客 1380

vue使用opencv.js报错Error: Bad size of input mat: the size should be same as the video.

let video = document.getElementById('my_video_id'); let capture = new cv.VideoCapture(video); let frame = new cv.Mat(video.videoHeight, video.videoWidth, cv.CV_8UC4); capture.read(frame); 执行之后报错 Error: Bad size of input mat: the size sho

Xeon_CC的博客 3169

Python爬虫实战:逆向解析央视频加密参数(附完整代码)

本文详细解析了央视频加密体系的技术实现,通过Python逆向工程实战演示如何解密动态密钥、AES加密和自定义哈希算法等核心组件。文章提供完整代码示例,涵盖GUID生成、参数构造和异步请求处理,帮助开发者掌握现代视频平台的反爬机制破解方法。

weixin_42532473的博客 1130

WRF后处理避坑指南:从namelist配置到降水计算的全流程解析

本文提供了一份详尽的WRF模式后处理避坑指南,涵盖从理解wrfout文件结构、核心变量解析到累计降水计算与专业气象图绘制的全流程。重点解析了RAINC与RAINNC的正确处理方法,并分享了使用wrf-python库高效绘制位势高度叠加风场图、累计降水图等专业图表的实战技巧与代码,旨在帮助用户规避常见错误,提升后处理效率与图表质量。

weixin_29200485的博客 353

opencv_004_opencv人脸剪切

人脸切剪 对人脸进行一个截切 package cn.guoke.demo02; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Size; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.o

weixin_45736498的博客 835

基于FPGA的时间数字转换(TDC)设计(一:原理)

基于FPGA的时间数字转换(TDC)设计,此为第一篇

sdau2005的博客 5070

OpenCV4(10)-图像像素值统计(C++,Python,JS)

知识点: 像素值统计 - 最小(min) - 最大(max) - 均值(mean) - 标准方差(standard deviation) API知识点 - 最大最小值minMaxLoc - 计算均值与标准方差meanStdDev #ifndef DAY10 #define DAY10 #include <opencv2/opencv.hpp> #inclu...

Apple_Coco的博客 1514

【深度学习】Progressive Distillation for Fast Sampling of Diffusion Models

这种方法通过迭代地将一个需要较多步骤的模型(称为教师模型)蒸馏成一个需要较少步骤的学生模型,每次迭代都将采样步骤减半,直到达到所需的采样步骤数量。通过渐进式蒸馏,论文将原始需要8192步采样的模型成功蒸馏为只需4步采样就能取得接近的生成质量的新模型,大幅提高了扩散模型的推理效率。这篇论文提出了一种"渐进式蒸馏"(Progressive Distillation)的方法,来大幅降低用于生成对抗网络(GAN)的扩散模型(Diffusion Model)在推理阶段的采样步数,从而提高其推理效率。

q742971636的博客 1787

YOLOv8工业缺陷检测实战:攻克光照不均难题,精度从70%到92%的全流程优化(附缺陷数据集)

YOLOv8在工业缺陷检测中突破光照不均难题,核心是“硬件控光+数据造景+模型聚焦+训练攻坚硬件控光:从源头减少光照变异,降低算法难度;数据造景:用CLAHE、合成样本让模型“见过足够多的光照情况”;模型聚焦:用ECA注意力和Focal-EIoU损失,让模型盯住缺陷而非光照;训练攻坚:分阶段+难例挖掘,强迫模型学习薄弱点。这套方案已在汽车轴承、手机外壳、PCB板3类产线落地,平均精度提升20%+,漏检率控制在0.08%以内,完全满足工业级要求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1195

OpenCV4(5)-图像像素算数操作(C++,Python,JS)

知识点: saturate_cast防止数据溢出 #ifndef DAY05 #define DAY05 #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; void day05() { Mat src = imread("...

Apple_Coco的博客 728

移花接木,玩转CANoe的几种扩展接口应用(五)——串口设备

近期看到粉丝朋友在CANoe自动化测试方面的关注度很大,今天就围绕这个做一个专题,总结一下以往项目上用过的几种CANoe扩展接口,分享出来希望对相关领域的网友有所帮助。本文是该专题的第五篇文章,主要讲解了串口设备的功能配置、连接方法、配置方法、调用方法,最后分析了这种扩展借口应用的特点和适用场景。

Mr.Cssust的博客 2369

OpenCV4(7)-图像像素逻辑操作(C++,Python,JS)

知识点: 像素操作之逻辑操作 - bitwise_and - bitwise_xor - bitwise_or 上面三个类似,都是针对两张图像的位操作 - bitwise_not 针对输入图像, 图像取反操作,二值图像分析中经常用 #ifndef DAY07 #define DAY07 #include <opencv2/opencv.hpp> #incl...

Apple_Coco的博客 601

开源GIS -- 笔记

基础开发库 数据读写:GDAL/OGR(C/C++) ArcGIS和GE都是使用此工具 投影转换:Proj.4(C/C++) 拓扑计算:JTS(Java),GEOS(C++),Shapely(python) 组件式开发库 GeoTools(Java),DotSpatial(.NET) 空间分析: Scipy(通用科学计算、方程求解), numpy,NextworkX, rPy(统计分析), Scikit-learn,pysal(空间分析) 深度学习: Keras、 tensorflow、 pytor

DZ Space 4521

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OpenCV4(3)-图像对象拷贝与创建(C++,Python,JS)

知识点: 1、图像对象的拷贝 学过C++的应该都很清楚,拷贝分为深拷贝和浅拷贝 OpenCV的clone()和copyTo是深拷贝,赋值运算符‘=’是浅拷贝 头部保存了该图像的宽度和高度还有通道数等信息,数据部分保存了该图像的像素信息 2、图像对象的创建 常用方法有Mat::zeros()和Mat::ones() #ifndef DAY03 #define DAY03 ...

Apple_Coco的博客 679

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

OpenCV4(2)-保存图像与色彩空间的转换(C++,Python,JS)

知识点: 1、图像保存— imwrite 第一个参数是图像保存路径 第二个参数是图像内存对象 2、色彩空间转换函数 — cvtColor COLOR_BGR2GRAY = 6 彩色到灰度 COLOR_GRAY2BGR = 8 灰度到彩色 COLOR_BGR2HSV = 40 BGR到HSV COLOR_HSV2BGR = 54 HSV到BGR #ifndef DAY02...

Apple_Coco的博客 1108

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OpenCV4学习笔记 - 目录

前言 OpenCV4 学习笔记,实践于 C++、Python 和 JS(Vue)代码 以下文章均收录在我的 GitHub 中,欢迎 Star ⭐ ο(=•ω<=)ρ⌒☆ 环境 Python:3.6.5 OpenCV 4.1.2 C++:OpenCV 4.1.2 JS:OpenCV 4.5.0 环境搭建可参考:B站视频 目录 入门 OpenCV4(1)-读取和显示图像(C++,Python,JS) OpenCV4(2)-保存图像与色彩空间的转换(C++,Python,JS) OpenCV4(3)-图像对

Apple_Coco的博客 1006

OpenCV4(9)-色彩空间的转换及应用(C++,Python,JS)

知识点: - RGB色彩空间 只需要知道RGB是我们最常用的色彩空间,且与设备无关。 - HSV色彩空间 对于一些直方图相关的图像处理和算法,将其转到HSV色彩空间,通常会取得较好的效果。 - YUV色彩空间 一种跟设备有关的色彩空间。 - YCrCb色彩空间 常用作皮肤检测,根据一些颜色的统计模型,通常会取得较好的效果。 API知识点 - 色彩空间转换cvtColor - ...

Apple_Coco的博客 767

OpenCV.js 图像阈值化实战指南:cv.threshold 与 cv.adaptiveThreshold 完整解析

本文基于 OpenCV 官方 JavaScript 教程《Image Thresholding》,讲解在浏览器环境(OpenCV.js)中完成图像二值化的两条主线:全局阈值化 `cv.threshold` 与局部自适应阈值化 `cv.adaptiveThreshold`。读完本文,你能掌握两类 API 的完整参数语义、六种阈值化类型与两种自适应算法的区别、仓库中可交互 Demo 的运行方式,并能结

gitblog_00709的博客 1106

ChatGPT写《OpenCV入门精讲》

它提供了丰富的图像和视频处理函数,涵盖图像处理、计算机视觉、深度学习等领域,可以用来处理图像、视频、摄像头等多媒体数据,也可以进行目标检测、人脸识别、手势识别、物体跟踪等应用。该模块使用了多种深度学习框架,如 TensorFlow、Caffe、Darknet、Torch 等,支持各种架构的预训练模型,并且可以加载自己的模型。OpenCV核心库模块core是OpenCV库的基础部分,提供了许多基础的数据结构、函数、算法和工具,包括矩阵、数组、图像数据结构,以及图像处理、计算几何、数据操作等基础算法。

百态·数智思维 | 聚焦大数据、量化与未来AI 2031
上一篇: OpenCV4(3)-图像对象拷贝与创建(C++,Python,JS)
下一篇: OpenCV4(5)-图像像素算数操作(C++,Python,JS)
Apple_Coco
博客等级 码龄9年 325粉丝 117原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Apple_Coco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值