您当前的位置: 首页 >  opencv

slandarer

暂无认证

  • 0浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

opencv (C语言) 系列一:各函数基本应用及图片反色

slandarer 发布时间:2020-12-27 18:59:35 ,浏览量:0

本期主要讲解各个基础函数的应用

数据类型: IplImage * 所用软件: Visual Studio 2017 头文件:

#include #include #include 对于需要数学运算的: #include

基本函数介绍:

图片路径: 假设图片在如下位置时,可使用路径:

const char *filename = "test.bmp";

在这里插入图片描述 否则使用绝对路径(例如在桌面):

const char *filename = "C:\\Users\\Lenovo\\Desktop\\test.bmp";

需要注意的是,绝对路径需要使用双斜杠

图片读取: 读取图片并命名为inputimage,若想读取黑白单通道图片,则可将 -1 改为 0 ;

IplImage *inputimage = cvLoadImage(filename, -1);

窗口创建: 创建名为input的窗口,若想自由改变窗口大小,则将 1 改为0:

cvNamedWindow("input", 1);

图片展示: 在名为input的窗口中展示图片inputimage:

cvShowImage("input", inputimage);

图像展示时间: 括号内数字小于等于0,保持窗口一直不关闭,数字大于0时,括号内数字即为保持不关闭的时长:

cvWaitKey(0);

窗口销毁:

cvDestroyWindow("inputimage");

如需大量销毁则可使用:

cvDestroyAllWindows();

图像内存释放:

cvReleaseImage(&inputimage);

空白图像创建: 虽说是空白图像,创建出来的默认是灰色 例:创建与inputimage大小相同图像

IplImage *newimage = cvCreateImage(cvSize(inputimage->width, inputimage->height), IPL_DEPTH_8U, inputimage->nChannels);

其中IPL_DEPTH_8U表明各通道数值范围为0-255,这是我们使用的最多的范围

各属性介绍: ->nChannels:通道数,大部分彩色图片都是三通道的,需要注意的是大部分软件使用RGB通道,而opencv使用BGR通道,三通道的数值代表B(blue),G(green),R(red)颜色的强度

->width ->height: 图像使用像素点显示,width表示横向像一行素点个数,height表示纵向一列像素点个数。

->widthStep: 一行实际存储数据个数,如图所示实际图像是按如下方式存储数据,widthStep=width*nChannels 在这里插入图片描述

->imageData: 实际数据存储矩阵,使用方式: 例(将第i行,第j列像素点第k通道颜色设为255)

inputimahe->imageData[i*inputimage->widthStep + j * inputimage->nChannels + k]=(unsigned char)255;

注由于数据存储的格式问题,赋值及数值提取最好都将数据转化为unsigned char格式

图像反色完整代码:

为保证格式,将代码分写为三个文件:

inverseImage.h

#pragma once
#include
#include
#include

IplImage *inverseImage(IplImage *inputimage);

inverseImage.cpp

#include"inverseImage.h"

IplImage *inverseImage(IplImage *inputimage) {
	IplImage *inverseimage = cvCreateImage(cvSize(inputimage->width, inputimage->height), IPL_DEPTH_8U, inputimage->nChannels);
	for (int i = 0; i height; i++) {
		for (int j = 0; j width; j++) {
			for (int k = 0; k nChannels; k++) {
				inverseimage->imageData[i*inputimage->widthStep + j * inputimage->nChannels + k] =
					255 - (unsigned char)inputimage->imageData[i*inputimage->widthStep + j * inputimage->nChannels + k];
			}
		}
	}
	return inverseimage;
}

main.cpp

#include"inverseImage.h"

int main() {
	const char *filename = "test.bmp";
	IplImage *inputimage = cvLoadImage(filename, -1);
	IplImage *inverseimage;

	inverseimage = inverseImage(inputimage);

	cvNamedWindow("inverse", 1);
	cvShowImage("inverse", inverseimage);
	cvWaitKey(0);
	cvDestroyAllWindows();
	cvReleaseImage(&inputimage);
	cvReleaseImage(&inverseimage);
	return 0;
}
图像反色效果:

在这里插入图片描述

关注
打赏
1664692598
查看更多评论
立即登录/注册

微信扫码登录

0.0466s