第十一届机械设计大赛省赛总结

收入囊中

  • 用imread读取图片
  • 用nameWindow和imshow展示图片
  • cvtColor彩色图像灰度化
  • imwrite写图像
  • Luv色彩空间转换

初识API

图像读取接口

image = imread(argv[1], CV_LOAD_IMAGE_COLOR);
  • CV_LOAD_IMAGE_UNCHANGED (<0) 图片怎么样就怎么读取(包括透明度这个通道)
  • CV_LOAD_IMAGE_GRAYSCALE ( 0)
  • CV_LOAD_IMAGE_COLOR (>0) RGB读取

建立窗口

    namedWindow( "Display window", WINDOW_AUTOSIZE );

如果你不是在 Qt这种平台上面,WINDOW_AUTOSIZE足够,会保持图片原有得尺寸

展示窗口

  imshow( "Display window", image ); //注意这里的名字要和nameWindow建立的窗口名字一样

完整程序

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
    if( argc != 2)
    {
     cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
     return -1;
    }

    Mat image;
    image = imread(argv[1], CV_LOAD_IMAGE_COLOR); 

    if(! image.data )
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }

    namedWindow( "Display window", WINDOW_AUTOSIZE );
    imshow( "Display window", image );

    waitKey(0);   //等待键盘时间
    return 0;
}

改变色彩空间,这是一个极其复杂的函数,要完全掌握需要很多知识,总之你要知道RGB只是一种表示方式,在实际处理中还有其他更好的色彩空间(如LUV,L表示物体亮度,u和v是色度)

cvtColor( image, gray_image, CV_BGR2GRAY );

函数接口    C++: void cvtColor(InputArray src,
OutputArray dst, int code,
int dstCn=0 )

最后一个是通道数,如果为0则继承自src的通道,CV_BGR2GRAY是常用的一个参数,将RGB图像转换成灰度图

写图片

imwrite( "./Gray_Image.jpg", gray_image );

#include <cv.h>
#include <highgui.h>

using namespace cv;

int main( int argc, char** argv )
{
 char* imageName = argv[1];

 Mat image;
 image = imread( imageName, 1 );

 if( argc != 2 || !image.data )
 {
   printf( " No image data \n " );
   return -1;
 }

 Mat gray_image;
 cvtColor( image, gray_image, CV_BGR2GRAY );

 imwrite( "./Gray_Image.jpg", gray_image );

 namedWindow( imageName, CV_WINDOW_AUTOSIZE );
 namedWindow( "Gray image", CV_WINDOW_AUTOSIZE );

 imshow( imageName, image );
 imshow( "Gray image", gray_image );

 waitKey(0);

 return 0;
}

举一反三:

  1. 虽然我们都说RGB,但实际存储是BGR,第一个byte是blue
  2. CV_32F is float - the pixel can have any value between 0-1.0, this is useful for some sets of calculations on data - but
    it has to be converted into 8bits to save or display by multiplying each pixel by 255(from stackoverflow).就是说CV_32F是0.0-1.0的,当我们要储存时候,必须乘255转换成整数,当一个unsigned
    char 3通道的图片要转换成Luv空间的时候,我们也要先除255再进行转化.
  3. img *= 1./255;
    cvtColor(img, img, CV_BGR2Luv);

你可能会思考OpenCV的imread是怎么做的,我们知道,计算机存储的是二进制,任何文件都是。

主要知道文件的组织格式,任何文件都能读取,比如,我要读取wav格式文件,如下代码。

#include<iostream>
#include<fstream>
#include<cstdio>
#include<stdlib.h>
#include<vector>
#include<cmath>

using namespace std;

/************* Wav file Struct ***************************
 *	占用空间	数据类型	含义
 *	4bytes		char		RIFF,资源交换文件标识
 *	4bytes		int			从下一个地址开始到文件尾的总字节数
 *	4bytes		char		WAVE,代表wave格式
 *	4bytes		char		FMT,波形格式标识
 *	4bytes		int			sizeof(PCMWAVEFORMAT),量化结果大小
 *	2bytes		short		为1表示线性PCM编码,否则表示有压缩的编码
 *	2bytes		short		1为单身道,2为双声道
 *	4bytes		int			采样频率
 *	4bytes		int			比特率,比特率=采样频率*音频通道数*每次采样得到的样本位数/8
 *	2bytes		short		块对齐
 *	2bytes		short		样本数据位数
 *	4bytes		char		"data",一个标识
 *	4bytes		int			wav文件实际音频数据所占的大小
 ***********************************************************/
typedef struct _WavHeader
{
	char wav_RIFF[4];
	int wav_FileSize;
	char wav_WAVE[4];
	char wav_FMT[4];
	int wav_PCM;
	short wav_PCMCode;
	short wav_Channel;
	int wav_SampleRate;
	int wav_AvgBytePerSecond;
	short wav_BlockAlign;
	short wav_BitsPerSample;
	char  wav_DATA[4];
	int wav_AudioSize;
} wavHeader;

const float a = 0.95;			//预强调系数
const int FrameLen = 256;		//帧长
const int FrameShift = 100;		//帧移
const double PI = 3.1415926;
vector<short>buffer;			//用于存储所有的signal
float Hamming[FrameLen];		//汉明窗

void InitHamming();				//用于汉明窗的初始化
void HammingWindow(vector<short>&, int, float*);		//对数据加窗

int main(int argc, char **argv)
{
	wavHeader waveheader;
	FILE* wavefile = fopen(argv[1], "rb");
	fread(&waveheader, sizeof(struct _WavHeader), 1, wavefile);
	printf("---------------------------wav file info----------------------------\n资源交换文件标识: %s\n文件大小: %d\nWAVE格式标识: %s\n波形格式标识: %s\n量化结果位数: %d\nPCM编码: %d\n单双通道: %d\n采样频率: %d\n比特率: %d\n块对齐: %d\n样本数据位数: %d\nDATA标识: %s\n音频数据大小: %d\n",waveheader.wav_RIFF, waveheader.wav_FileSize, waveheader.wav_WAVE, waveheader.wav_FMT,waveheader.wav_PCM, waveheader.wav_PCMCode, waveheader.wav_Channel, waveheader.wav_SampleRate, waveheader.wav_AvgBytePerSecond,waveheader.wav_BlockAlign, waveheader.wav_BitsPerSample, waveheader.wav_DATA, waveheader.wav_AudioSize);	

	return 0;
}

下面是我的输出,所以,读取文件就是这样工作的

---------------------------wav file info----------------------------

资源交换文件标识: RIFF$+

文件大小: 338724

WAVE格式标识: WAVEfmt

波形格式标识: fmt

量化结果位数: 16

PCM编码: 1

单双通道: 1

采样频率: 22050

比特率: 88200

块对齐: 4

样本数据位数: 32

DATA标识: data

音频数据大小: 338688

计算机视觉讨论群162501053

转载请注明:http://blog.csdn.net/abcd1992719g

时间: 2024-10-02 20:33:47

第十一届机械设计大赛省赛总结的相关文章

第三届 “创意正能量” 华中地区移动 App 分析与设计大赛 参赛心得

第三届 “创意正能量” 华中地区移动 App 分析与设计大赛 参赛心得 在本次比赛中,我团队在初赛以相对靠后的排名进入复赛,并在以相对靠后的排名在复赛中落选,未能进入决赛. 未能进入决赛的结果是意料之中的.但综合排名整体的偏低必然反映比赛准备中的问题.这些问题,显然是在生活与提升过程中长期不利于取得优秀结果的不良习惯和行为导致的. 通过对比赛过程的分析,我做出以下总结.总结将尽量做到反映备赛事实,摒弃完全归因于客观因素的不良想法. 一.     功能重点不突出 “自”的功能亮点集中于“融合”,即

机器人设计之一机械设计

我参加了两届Robomaster大赛,该机器人大赛是中国四大机器人大赛之一.难度相比之下较低,因为DJI才开始做这个比赛,因此为了推广,所以降低了参赛门槛. 参赛经费门槛:10w 参赛技术门槛:机械设计本科.电控本科(STM32).图像识别本科及以上.自动控制本科: 有一个热爱机器人的团队: 以上三点具备就可以参加这个比赛了. 接下来我就该车的机械设计从以下几个方面,简单说下我的经验: 底盘,减震,云台,炮台,抓弹等.好的机械设计是成功的前提.该比赛的机械设计很简单.但是要做稳定却不那么容易,底

机械设计 AutoCAD2010视频教程 Pro/E4视频教程 UG5.0视频教程 solidworks2010视频教程

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut

第五届蓝桥杯全国软件设计大赛--2013年校内选拔赛Java题目

第五届蓝桥杯全国软件设计大赛 2013年校内选拔赛Java题目 一.考生注意: (1)[结果填空题]要求参赛选手根据题目描述直接填写结果.求解方式不限.不要求源代码. 把答案存入[考生文件夹]下对应题号的文件中即可. (2)[代码填空题]要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确.完整.所填写的代码不超过一条语句(即中间不能出现分号). 把填空的答案(仅填空处的答案,不包括题面已存在的代码)存入[考生文件夹]下对应题号的文件中中即可. (3)[编程题]要求选手设计

叶轮涡轮机械设计ADT Ships TURBOdesign 5.2正式版发布

叶轮涡轮机械设计ADT Ships TURBOdesign 5.2正式版发布  CONCEPTS NREC Suite 8.4.9.0 Win32 8CD  Concepts Nrec AxCent 8.4.5.0 Win32 1CD  Concepts Nrec PumPal 8.4.4.0 Win32 1CD  Concepts Nrec MAX-PAC 8.2.4.24 Win64 1CD     Advanced Design Technology (ADT)是一个全球领先的先进的涡轮机

极客48小时APP设计大赛

为期三天的极客APP设计大赛,完美结束.下面我们来介绍这个大赛的整个过程. 一 极客APP设计大赛性质 由铂涛孵化器主办,百思一刻承办的铂涛创新体验极客挑战赛.主要由在校大学生.社会工作人士.创业者等组成的.期间有国家发改委主任等领导人莅临现场. 二 参赛的规模 整个过程总共有300个团队及个人报名参加报名,最终由举办方精选了16个团队80人参赛.里面有酷狗音乐第一队,小跑科技的第16对等等. 我们是代表公司参赛的,公司总共有两个队:第12队和第8队. 三 比赛时间 48小时激烈角逐和一下午的路

机械设计AutoCAD2010视频教程 Pro/E4视频教程 UG5.0视频教程 solidworks2010视频教程

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut

全国第七届大学生计算机设计大赛

这次计算机设计大赛在东北大学,经过了紧张得4天比赛,终于拿到一个不错得成绩,大赛中好多作品让人耳目一新,总结本次比赛收获很多. 有图有真相

电脑办公,平面设计,室内设计,室外设计,影视动画,机械设计,工业自控,

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut