openCV - 1. 加载、修改、保存图像
加载
cv::imread修改cv::cvtColor保存cv::imwrite
加载图像cv::imread
imread功能是加载图像文件成为一个Mat对象,其中第一个参数表示图像文件名称- 第二个参数,表示加载的图像是什么类型,支持常见的三个参数值
- IMREAD_UNCHANGED (<0) 表示加载原图,不做任何改变
- IMREAD_GRAYSCALE ( 0)表示把原图作为灰度图像加载进来
- IMREAD_COLOR (>0) 表示把原图作为RGB图像加载进来
注意:OpenCV支持JPG、PNG、TIFF等常见格式图像文件加载
显示图像cv::namedWindos与cv::imshow
namedWindos功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它- 常见用法
namedWindow("Window Title", WINDOW_AUTOSIZE) WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小WINDOW_NORMAL跟QT集成的时候会使用,允许修改窗口大小。imshow根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二参数是Mat对象
保存图像 cv::imwrite
- 保存图像文件到指定目录路径
- 只有8位、16位的PNG、JPG、Tiff文件格式而且是单通道或者三通道的BGR的图像才可以通过这种方式保存
- 保存PNG格式的时候可以保存透明通道的图片
- 可以指定压缩参数
代码演示
#include<opencv2\opencv.hpp>
#include<highgui.h>
using namespace cv; // 使用命名空间
int main(int argc, char** argv)
{
// read image
Mat image = imread("test.jpg");
// 对图像进行所有像素用 (255- 像素值)
Mat invertImage;
image.copyTo(invertImage);
// 获取图像宽、高
int channels = image.channels();
int rows = image.rows;
int cols = image.cols * channels;
if (image.isContinuous()) {
cols *= rows;
rows = 1;
}
// 每个像素点的每个通道255取反
uchar* p1;
uchar* p2;
for (int row = 0; row < rows; row++) {
p1 = image.ptr<uchar>(row);// 获取像素指针
p2 = invertImage.ptr<uchar>(row);
for (int col = 0; col < cols; col++) {
*p2 = 255 - *p1; // 取反
p2++;
p1++;
}
}
// create windows
namedWindow("My Test", CV_WINDOW_AUTOSIZE);
namedWindow("My Invert Image", CV_WINDOW_AUTOSIZE);
// display image
imshow("My Test", image);
imshow("My Invert Image", invertImage);
// 关闭
waitKey(0);
destroyWindow("My Test");
destroyWindow("My Invert Image");
return 0;
}
openCV - 1. 加载、修改、保存图像的更多相关文章
- opencv 加载 修改 保存 图像
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; /* 1 加载图像 cv::imre ...
- OpenCV图像加载与保存
OpenCV中的图像加载与保存 头文件是包含的库,在GitHub上下载的 imread("图片路径",图片加载方式) 图片加载方式: IMREAD_GRAYSCALE 灰度图像 I ...
- python实现图像加载与保存,窗口创建与销毁,图片常用属性,ROI,通道的分离与合并,对比度和亮度
目录: (一)图像加载与保存 (二)图像显示窗口创建与销毁 (三)图片的常用属性的获取 (四)生成指定大小的矩形区域(ROI) (五)图片颜色通道的分离与合并 (六)两张图片相加,改变对比度和亮度 ( ...
- [技术翻译]预加载响应式图像,从Chrome 73开始实现
本次预计翻译三篇文章如下: 01.[译]9个可以让你在2020年成为前端专家的项目 02.[译]预加载响应式图像,从Chrome 73开始实现 03.[译]您应该知道的13个有用的JavaScript ...
- KnockoutJS 3.X API 第七章 其他技术(1) 加载和保存JSON数据
Knockout允许您实现复杂的客户端交互性,但几乎所有Web应用程序还需要与服务器交换数据,或至少将本地存储的数据序列化. 最方便的交换或存储数据的方式是JSON格式 - 大多数Ajax应用程序今天 ...
- Qt Load and Save PCL/PLY 加载和保存点云
Qt可以跟VTK和PCL等其他库联合使用,十分强大,下面的代码展示了如何使用Qt联合PCL库来加载和保存PCL/PLY格式的点云: 通过按钮加载点云: void QMainWindow::on_pb_ ...
- 6.Knockout.Js(加载或保存JSON数据)
前言 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多数的Ajax应用程 ...
- 【技术贴】第二篇 :解决使用maven jetty启动后无法加载修改过后的静态资源
之前写过第一篇:[技术贴]解决使用maven jetty启动后无法加载修改过后的静态资源 一直用着挺舒服的,直到今天,出现了又不能修改静态js,jsp等资源的现象.很是苦闷. 经过调错处理之后,发现是 ...
- Knockout应用开发指南 第六章:加载或保存JSON数据
原文:Knockout应用开发指南 第六章:加载或保存JSON数据 加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地 ...
- Tensorflow模型加载与保存、Tensorboard简单使用
先上代码: from __future__ import absolute_import from __future__ import division from __future__ import ...
随机推荐
- PHP sin() 函数
实例 返回不同数的正弦: <?php高佣联盟 www.cgewang.comecho(sin(3) . "<br>");echo(sin(-3) . " ...
- 2019 HL SC day1
今天讲的是图论大体上分为:有向图的强连通分量,有向图的完全图:竞赛图,无向图的的割点,割边,点双联通分量,变双联通分量以及圆方树 2-sat问题 支配树等等. 大体上都知道是些什么东西 但是仍需要写一 ...
- js 读取word和txt(react版) + 正则分割段落
show the code 前提:需要mammoth包~ import React, { useState, useReducer } from 'react'; import { Button, A ...
- Spring Cloud Data Flow用Shell来操作,方便建立CICD
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 之前我们用两篇文章讲解了Spring Cloud Data Flow,例子都是用UI操作的,但我们在Linux系统上经常是无 ...
- CSS样式大全(网络收集整理)
CSS样式大全(网络收集整理 字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 { ...
- Javascript注意点
Javascript注意点 在img标签中的src如果为相对路径, 但是在js获取的时候会转为全路径 候选框中, 在执行onclick之前, 会由于html的特征先设置checked属性 为a标签添加 ...
- 安装mpi的那些坑
安装mpi可以用 yum 安装 具体从操作步骤可参考这个链接mpi的yum安装方式 mpi在linux下 使用root权限 会报错 修改方式有两种 1 2.换其他账户 mpi会自行评估我们cpu的 ...
- pytorch载入模型的参数总是变化,比如说某个conv(3,3)kernel的几个参数总是变化:
- springboot中redis的缓存穿透问题
什么是缓存穿透问题?? 我们使用redis是为了减少数据库的压力,让尽量多的请求去承压能力比较大的redis,而不是数据库.但是高并发条件下,可能会在redis还没有缓存的时候,大量的请求同时进入,导 ...
- java 基本类型包装类
一 基本类型包装类 1.包装类概述 Java中提供了相应的对象来解决实现字符串与基本数据之间转换问题,基本数据类 型对象包装类:java将基本数据类型值封装成了对象. 8种基本类型对应的包装类如下: ...