![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图像处理
六月的翅膀
人生本是无根草,醉了何必问家乡
展开
-
C++:关于圆形鱼眼半全景图转为等距圆柱投影图
之前记录了立方体和360全景之间的转换,这次记录下鱼眼图与360全景图之间的转换。这里的360全景图其实指的是等距圆柱投影图。原创 2024-05-11 17:09:59 · 187 阅读 · 0 评论 -
图像处理/opencv/C++:图像马赛克
马赛克操作就是在指定大小的范围内,图像的颜色取成相同的。int masaike(unsigned char *srcData, int width, int height, int stride, int mode){ //@ stride:每个马赛克块的大小 //@ mode: 未使用参数 int ret = 0; int i, j, gray, offset; //offset = stride - width * 3;//这个参数没有用到 //有些情况下会对图像的宽度保持为4原创 2022-04-30 05:30:07 · 4117 阅读 · 0 评论 -
OpenCV:透视变换/仿射变换
//@ 对棋盘格原图透视变换 //@ 将棋盘格图像变换到屏幕大小,但是周边还是会有边框,图像中的屏幕是没有铺满的,误差 Mat chessboard_warp; cv::warpPerspective(model_var.chessboard_image, chessboard_warp, model_var.warpMatrix, cv::Size(model_var.SCREEN_WIDTH, model_var.SCREEN_HEIGHT), cv::INTER_LINEAR.原创 2022-04-25 15:03:36 · 4901 阅读 · 0 评论 -
图像处理/opencv/C++:三种灰度化
#include<iostream>#include<Windows.h>#include<opencv2\opencv.hpp>using namespace std;using namespace cv;#define MIN2(a, b) ((a) < (b) ? (a) : (b))#define MAX2(a, b) ((a) > (b) ? (a) : (b))#define CLIP3(x, a, b) MIN2(MAX2(a.原创 2022-04-24 00:33:14 · 990 阅读 · 1 评论 -
OpenCV/C++:Mat与二维指针相互转换
对于一个Mat,有时需要将其转为二维指针传递int** mat2ptrarray(Mat& pic){ int** data; data = new int* [pic.rows]; for (int i = 0; i < pic.rows; i++) { data[i] = new int[pic.cols]; for (int j = 0; j < pic.cols; j++) {原创 2022-04-22 09:07:58 · 1749 阅读 · 0 评论 -
图像处理:dither
#include<iostream>#include<opencv2\opencv.hpp>using namespace std;using namespace cv;int main() { Mat img_gray0 = imread("xjj.jpg", IMREAD_GRAYSCALE); int img_h, img_w; img_h = img_gray0.size().height; img_w = img_gray0.size().width;.原创 2022-04-20 11:41:47 · 4555 阅读 · 0 评论 -
好轮子收藏:一个支持几乎所有流行格式的图像加载库stb_image.h
是在opengl教程网站上看到的,挺好用。stb_image.h一个非常流行的单头文件图像加载库,它能够加载大部分流行的文件格式,并且能够很简单得整合到你的工程之中。下载地址:stb/stb_image.h at master · nothings/stb · GitHub只有一个头文件,将它加入你的工程,并另创建一个新的C++文件,输入以下代码:#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"通过定义STB_IMAG原创 2021-12-24 17:43:38 · 1916 阅读 · 5 评论 -
python/c++计算psnr
import cv2import numpy as npimport mathdef psnr(target, ref): #将图像格式转为float64 target_data = np.array(target, dtype=np.float64) ref_data = np.array(ref,dtype=np.float64) # 直接相减,求差值 diff = ref_data - target_data # 按第三个通道顺序把三维矩阵拉平.原创 2021-11-05 09:23:26 · 1650 阅读 · 8 评论 -
C++调pytorch模型的全过程记录
前面已经记录过了,流程就是这么个流程:配置libtorch --->python训练的模型怎么在C++使用?_己亥谷雨-CSDN博客 pytorch模型转化 编写C++调用程序这里就来记录一下模型转化和C++调用程序。关于模型的训练就不多说了,不会训练模型还扯什么调用。好在之前记录过一点:训练模型PyTorch:VGG16简单入门版_己亥谷雨-CSDN博客 保存测试模型PyTorch:保存/加载训练好的模型测试_己亥谷雨-CSDN博客_pytorch训练好的模型去检测==..原创 2021-10-30 02:06:41 · 2568 阅读 · 3 评论 -
OpenGL:读取图片显示
由于OpenGL没有直接读取jpg、bmp、png等图像格式的函数,需借助其他工具将图像文件读取转化为内存信息。相对C++的文件读取函数,我更习惯使用简便的OpenCV图像读取#include <gl/glut.h>#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;#define WindowWidth 400#define W转载 2021-10-09 11:31:50 · 3877 阅读 · 1 评论 -
C++:获取图片文件信息-图片名称、类型、像素宽高
转自:C++ 获取图片文件信息 - 席纳霍霍 - 博客园参考:图片头文件信息解析_adzcsx2的博客-CSDN博客_图片头文件#include <gl/glut.h>#include <opencv2/opencv.hpp>#include <iostream>#include <algorithm>#include <string>using namespace std;using namespace cv;#de.转载 2021-10-08 18:15:47 · 2486 阅读 · 0 评论 -
C++/OpenCV:同颜色检测提取
看到这个老哥写了一个类,但是没有demo,就使用这个类写了个例子【OpenCV】OpenCV创建颜色识别类-class ColorDetector_Taily老段的专栏-CSDN博客头文件 ColorDetector.h#pragma once#ifndef COLORDETECTOR_H_#define COLORDETECTOR_H_#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui原创 2021-09-15 15:05:25 · 2188 阅读 · 0 评论 -
图像处理:直方图均衡化
下面是一个例子这样就可以直观的看到直方图的变换了,可以理解为一个非线性的分段的平移拉伸原创 2021-09-13 23:17:04 · 135 阅读 · 0 评论 -
C++:画数组元素直方图
对一个数组,将其中的元素值画出来/** 画数组直方图,画在一个Mat上*/void show_lzb(int arr[], int size, string title){ Mat drawImage = Mat::zeros(Size(256, 256), CV_8UC3); int _max = 0; for (int i = 0; i < size; i++) { if (arr[i] > _max) {原创 2021-09-12 11:22:30 · 1584 阅读 · 0 评论 -
图像格式和大小
bmp格式没有压缩像素格式,存储在文件中时先有文件头、再图像头、后面就都是像素数据了,上下颠倒存储。jpeg是有损压缩格式, 将像素信息用jpeg保存成文件再读取出来,其中某些像素值会有少许变化。在保存时有个质量参数可在[0,100]之间选择,参数越大图片就越保真,但图片的体积也就越大。一般情况下选择70或80就足够了。jpeg没有透明信息。 jpeg比较适合用来存储相机拍出来的照片,这类图像用jpeg压缩后的体积比较小。其使用的具体算法核心是离散余弦变换、Huffman编码、算术编码等技术。pn原创 2021-09-06 22:10:56 · 1274 阅读 · 0 评论 -
gamma曲线
Gamma是什么?一开始,它是一个专有名词,后来被广泛运用于图像灰度映射的校正。宏观上我们看到的就是,Gamma变了,图像亮度就跟着变了,本质上是信息的映射关系在数学上变了。以下是正文:Gamma是在计算机图形领域最不容易被理解掌握的概念之一,其中有很大一部分原因要怪它到处出现,极容易让人混淆。Gamma的最初定义如下:“Gamma是用来描述显示设备的‘非线性’程度的专有名词”。这是历史上Gamma所拥有的第一个定义。但是很显然这样的一个定义并不能解释清楚任何的问题。那么要解释清楚Gamma,.原创 2021-08-23 11:45:50 · 4670 阅读 · 0 评论 -
PyQT:第一个Demo,画出鼠标单击位置出图像的列像素折线图
场景:有一系列图像,需要查看图像每列的像素值的大小,可以把图像读出来然后指定列,再查看,但比较麻烦,每看一列都要修改一下。后面又用回调函数滑动条,这样不用每次都修改列了,但假如换张图像的话还是要修改图像路径。所以就想做个界面,可以选择打开图像,并且鼠标单击一下图像中某点,就会画出这个点所在列(当然也可以是行)的一整列像素值的折线图。最终的效果如下,还可以基本满足。代码如下:from PyQt5.QtWidgets import QApplication, QMessageBox, QFi.原创 2021-08-11 11:50:27 · 739 阅读 · 1 评论 -
佳能相机CR2转TIFF
用dcraw工具,在cmd里执行,powershell竟然都不行原创 2021-08-09 15:38:22 · 307 阅读 · 2 评论 -
OpenCV:添加透明通道/分离图像和视频的RGB通道
对图像#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;string imgName = "lena256.tif";int main(int argc, char* argv[]){ Mat src = imread(imgName); Mat img; resize(src, img, Size(src.cols*0.5, src.原创 2021-07-23 16:25:51 · 2138 阅读 · 0 评论 -
OpenCV:回调函数
我们创建了一个trackbar,如下:createTrackbar(trackBarName, winName, &posTrackBar, maxValue, onChangeTrackBar);现在来看一下头文件中对每个参数的解释:@param trackbarname Name of the created trackbar.@param winname Name of the window that will be used as a parent of the crea.原创 2021-07-22 18:17:31 · 659 阅读 · 0 评论 -
OpenCV:图像编解码
#include <iostream>#include <opencv2/opencv.hpp>#include <highgui.h>using namespace std;using namespace cv;double getPSNR(Mat& src1, Mat& src2, int bb=0){ int i, j; double sse, mse, psnr; sse = 0.0; Mat s1, s2; cvtCol.原创 2021-07-22 16:42:44 · 980 阅读 · 1 评论 -
BMP图像数据格式详解
一.简介BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为设备无关位图DIB(device-i原创 2021-07-22 10:53:39 · 4166 阅读 · 0 评论 -
C++:验证图像数据结构(待)
int main(int argc, char* argv) { Mat src = imread("mask3.bmp"); cout << "origin image size: " << src.dataend - src.datastart << endl; cout << "height: " << src.rows << endl << "width: " << src.cols <.原创 2021-07-22 00:02:41 · 86 阅读 · 0 评论 -
图像算法研究---一种简单的YUV转RGB的优化算法
YUV与RGB的相互转换一直以来都是非常常用的基础算法,如何才能最高效的转换,成为一个难点问题,尤其是目前视频直播火热的时候,这些算法的优化也越发重要。今天我结合自己的一些经验,给大家介绍一个简单的优化算法。首先,我们看下最常用的YUV与RGB相互转换的算法公式,如下所示:注意,RGB取值范围均为0-255:1,RGB转YUVY = 0.299R + 0.587G + 0.114BU = -0.147R - 0.289G + 0.436BV = 0.615R - 0.515G - 0转载 2021-07-21 15:24:46 · 1322 阅读 · 1 评论 -
C++/OpenCV:error C4996: ‘fopen‘: This function or variable may be unsafe.
在调用fopen函数时会出现类似下面这种报错。error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.解决打开项目 -> 属性 -> C/C++ ->预处理器 ->...原创 2021-06-21 16:02:45 · 267 阅读 · 1 评论 -
C++/OpenCV:读取视频与调用摄像头
OpenCV通过VideoCapture类,来对视频进行读取,调用摄像头读取视频:1.先实例化再初始化VideoCapture capture;Capture.open("1.avi");2.实例化的同时进行初始化VideoCapture capture("1.avi");播放视频:视频读如到VideoCapture类对象之后,用一个循环将每一帧显示出来while(1){Mat frame;capture>>frame;imshow("读取视频"转载 2021-06-04 17:58:30 · 3311 阅读 · 0 评论 -
OpenCV:透视变换
一、话说透视变换透视变换是将图像从一个视平面投影到另外一个视平面的过程,所以透视变换也被称为投影映射(ProjectionMapping)。我们知道在图像的仿射变换中需要变换矩阵是一个2x3的两维平面变换矩阵,而透视变换本质上空间立体三维变换,根据其次坐标方差,要把三维坐标投影到另外一个视平面,就需要一个完全不同的变换矩阵M,所以这个是透视变换跟OpenCV中几何仿射变换最大的不同。OpenCV中透视变换的又分为两种:...转载 2021-06-04 15:00:19 · 707 阅读 · 0 评论 -
图像处理:颜色空间
颜色空间(彩色模型、色彩空间、 彩色系统etc)是对色彩的一种描述方式,定义有很多种,区别在于面向不同的应用背景。 例如显示器中采用的RGB颜色空间是基于物体发光定义的(RGB正好对应光的三原色:Red,Green,Blue);工业印刷中常用的CMY颜色空间是基于光反射定义的(CMY对应了绘画中的三原色:Cyan,Magenta,Yellow);HSV、HSL两个颜色空间都是从人视觉的直观反映而提出来的(H是色调,S是饱和度,I是强度)。RGB颜色空间基于颜色的加法混色原理,从黑色不断叠...转载 2021-01-08 20:29:01 · 512 阅读 · 0 评论 -
图像处理:灰度(级)和分辨率
1、像素点像素点是最小的图像单元,一张图片由好多的像素点组成。如下图 可以看到上述图片尺寸是500 * 338 的,表示图片是由一个500 * 338的像素点矩阵构成的,这张图片的宽度是500个像素点的长度,高度是338个像素点的长度,共有500 * 338= 149000个像素点。2、像素把鼠标放在一个图片上,这个时候会显示尺寸和大小,这里的尺寸就是像素。3、RGB因为一个像素点的颜色是由RGB三个值来表现的,所以像素点矩阵对应三个颜色向量矩阵,分别是R矩阵...转载 2021-01-08 17:08:29 · 12413 阅读 · 1 评论 -
OpenCV 读图像、灰度化、边缘检测
#include<opencv2\highgui\highgui.hpp>#include<opencv2\imgproc\imgproc.hpp>#include<iostream>using namespace cv;using namespace std;int main() { Mat srcImage = imread("D://Visual studio//2020-10//Image algorithm//test.jpg");//...原创 2020-10-24 11:12:12 · 500 阅读 · 0 评论 -
VS2019配置opencv
摘要:vs2019新鲜出炉,配置opencv又有哪些不一样呢,这个教程将会一步一步的教你如何配置opencv和跑动opencv一个简单的项目。测试代码请在原文找到,转发备注原文链接:https://xygeng.cn/post/151.html环境:系统:win10系统截至20190523版本opencv版本:3.4.1版本IDE:宇宙最强IDEA最新版本2019社区版教程:1、下载opencv安装包,由于4.0.1版本会出现不同的错误,我们将使用3.4.1...原创 2020-10-23 16:35:46 · 2171 阅读 · 3 评论 -
图像算法简介
目录介绍图像变换图像压缩图像增强图像模糊处理图像插值介绍图像算法是指对图像进行处理所用的的算法。包括对图像去噪、图像变换、图像分析、图像压缩、图像增强、图像模糊处理等。图像变换图像变换包括图像的拉伸、收缩、扭曲、旋转、傅里叶变换等。一般称原始图像为空间域图像,称变换后的图像为转换域图像,转换域图像可反变换为空间域图像。图像处理中所用的变换都是酉变换,即变换核满足正交条件的变换。经过酉变换后的图像往往更有利于特征抽取、增强、压缩和图像编码。图像压缩图像压缩是转载 2020-10-23 11:17:34 · 1039 阅读 · 0 评论 -
图像二值化阈值选取常用方法
图像二值化阈值选取常用方法:1.双峰法。2.P参数法。3.最大类间方差法(Otsu、大津法)。4.最大熵阈值法。5.迭代法(最佳阈值法)。1.双峰法。1996年,Prewitt提出了直方图双峰法,即如果灰度级直方图呈明显的双峰状,则选取两峰之间的谷底所对应的灰度级作为阈值。注意:应用灰度直方图双峰法来分割图像,也需要一定的图像先验知识,因为同一个直方图可以对应若干个不同的图像,直方图只表明图像中各个灰度级上有多少个象素,并不描述这些象素的任何位置信息。该方...转载 2020-09-26 00:34:48 · 7485 阅读 · 0 评论 -
图像处理基础系列-01
人总是有很多想象中的美好,各种憧憬,这挺好的,而且是不可或缺的。但是,前提自己要强大,不仅需要内心强大,更要有能力支撑。不管以后做什么,一旦铁了心选定了,就要朝着最强去做,或者局部最强,嘿嘿。现在还没选定,谁知道以后会不会做图像呢,所以图像还是不想丢。技多不压身。努力,自律,热爱。——2020年9月25日有的时候总想把笔记写的工整写,往往会分散很多时间和注意力在那上面所以,写乱点没关系,写在哪里都不是目的,最终是要写到脑子里只要到了脑子里,再凌乱的东西,都是工整的。这个主要是记录,给自转载 2020-09-25 20:51:11 · 532 阅读 · 0 评论