一、对单独彩色图片的RGB通道分离:
#include <iostream>
#include "cv.h"
#include "highgui.h"
using namespace std
using namespace cv
int main(int argc,char* argv[])
{
Mat img = imread("lena.jpg"/*,CV_LOAD_IMAGE_COLOR*/)
Mat channel[3]
split(img,channel)
imshow("original",img)
imshow("B",channel[0])
imshow("G",channel[1])
imshow("R",channel[2])
//set blue channel to 0
channel[0] = Mat::zeros(img.rows,img.cols,CV_8UC1)
//merge red and green channels
merge(channel,3,img)
imshow("R_G_merge",img)
waitKey(0)
return 1
}
二、对摄像头摄春迟肆入视频帧的RGB彩色通道分离
int main(int argc,char* argv[])
{
VideoCapture cap
cap.open(0)
if(!cap.isOpened())
{
exit(0)
}
cap.set(CV_CAP_PROP_FRAME_WIDTH,250)
cap.set(CV_CAP_PROP_FRAME_HEIGHT,250)
cout <<"Frame Width: " <<cap.get(CV_CAP_PROP_FRAME_WIDTH) <<endl
cout <<"Frame Height: " <<cap.get(CV_CAP_PROP_FRAME_HEIGHT) <<endl
Mat frame
vector<Mat>rgb
cap >>frame
//rgb.push_back( Mat(frame.rows, frame.cols, CV_8UC1))
//rgb.push_back( Mat(frame.rows, frame.cols, CV_8UC1))
//rgb.push_back( Mat(frame.rows, frame.cols, CV_8UC1))
//rgb.push_back( Mat(frame.rows, frame.cols, CV_8UC1))
namedWindow("original", 1)
namedWindow("red", 1)
namedWindow("green", 1)
namedWindow("blue", 1)
for()
{
cap >>frame
imshow("original", frame)
split(frame, rgb)
imshow("red", rgb.at(2))
imshow("green", rgb.at(1))
imshow("blue", rgb.at(0))
if(waitKey(30) >= 0)
break
}
waitKey(0)
return 1
}
1.split()函数
此函数的作用是将一个图像通道进行分离。
首先看一下split()函数定义:
void split(const Mat&m, vector<Mat>&mv )
参数说明:
第一个参数,const Mat&类型的src,填我们需要旦歼进行分离的图像;
第二个参数,vector<Mat>类型的mv,填函数的输出数组或者输出的vector容器,即分离后的图像;
2.merge()函数
merge()函数的功能是split()函数的逆向 *** 作,将多个数组合并成一个多通道的数组。
首先看一下merge()函数定义:
void merge(const vector<Mat>&mv, OutputArray dst )
参数说明:
第一个参数,const <Mat>类型的mv,填需要被合并的vector容器的阵列,这个mv参扒轿数中所有的矩阵必须有着一样的尺寸和深度;说白了就是前面被split()函数分离后的图像通道。
第二个参数,保存为合并后的图像;
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv
using namespace std
int main()
{
//【0】定义相关变量
Mat srcImage, newImage //源图像、通道合并后的图像
Mat srcImage_B, srcImage_G, srcImage_R //R、G、B各个通道
Mat image_H, image_S, image_V //H、S、V各个通道
vector<Mat>channels_BGR //vector<Mat>: 可以理解为存放Mat类型的容器(数组)
vector<Mat>channels_HSV
//【1】读取原始图像并检查图像是否读取成功
srcImage = imread("D:\\OutPutResult\\ImageTest\\adog.jpg") //请修改为自己的图像路径
if (srcImage.empty())
{
cout <<"读取图像有误,请重新输入正确路径!\n"
return -1
}
imshow("srcImage源图像", srcImage) //在窗口显示源图像
//【2】对加载的原图像进行通道分离,即把一个3通道图像转换成为3个单通道图像
split(srcImage, channels_BGR)
//0通道为B分量,1通道为G分量,2通道为R分量。因为:RGB色彩空间在opencv中默认通道顺序为BGR!!!
srcImage_B = channels_BGR.at(0)
srcImage_G = channels_BGR.at(1)
srcImage_R = channels_BGR.at(2)
imshow("srcImage_B通道", srcImage_B) //分别显示R,G,B各个通道图像
imshow("srcImage_G通道", srcImage_G)
imshow("srcImage_R通道", srcImage_R)
//【3】将BGR颜色空间转换为HSV颜色空间
Mat image_hsv
cvtColor(srcImage, image_hsv, CV_BGR2HSV)
imshow("HSV颜色空间图像", image_hsv)
//【4】对加载的HSV图像进行通道分离
split(image_hsv, channels_HSV)
//0通道为H分量,1通道为S分量,2通道为V分量
image_H = channels_HSV.at(0)
image_S = channels_HSV.at(1)
image_V = channels_HSV.at(2)
imshow("image_H通道", image_H)//分别显示H,S,V各个通道图像
imshow("image_S通道", image_S)
imshow("image_V通道", image_V)
//【5】将3个单通道重新合并成一个三通道图像
merge(channels_HSV, newImage)
imshow("将H,S,V通道合并后的图像", newImage)
//【6】保持等待状态
waitKey(0)
return 0
}
5.程序说明
看到这里,可能有人会问为什么分离出的通道都是黑白灰,而不是红绿蓝?
原因是分离后为单通道,相当于分离通道的同时把其他两个通道填充了相同的数值。比如红色通道,分离出红色通道的同时,绿色和蓝色被填充为和红色相同的数值,这样一来就只有黑白灰了。那么红色体现在哪呢?可以进行观察,会发现原图中颜色越接近红色的地方在红色通道越接近白色。
====================分割线===============
此程序共显示9个窗口。
先将RGB图像通道分离,分别显示R、G、B、单个通道;
后将RGB颜色空间转为HSV空间,将HSV图像通道分离,分别显示H、S、V、单个通道;
最后将H、S、V、单个通道重新合并为3通道图像;
=========================END======================
8086的,设ADC0809的8个端口地址为260H~267H,试编制采用延时等待的方式采集数据的程序段(包括数据段定义)。要求对8路通道进行循环采集,各采集100个数据分别存入8个数据区中。解:假设延时程颤粗序可调用DELAY,时间足以保证一次A/D转换结束。
DATA SEGMENT
BUF0 DB 100(?)
BUF1 DB 100(?)
BUF2 DB 100(?)
BUF3 DB 100(?)
BUF4 DB 100(?)
BUF5 DB 100(?)
BUF6 DB 100(?)
BUF7 DB 100(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:MOV AX,DATA
MOV DS,AX
MOV CX,100 设置采集次数
MOV SI,0000H
AA: MOV BX,OFFSET,BUF0
MOV DX,0260H
OUT DX,AL 启动IN0通道
CALL DELAY
IN AL,DX 读取IN0通道转换结果
MOV [BX+SI],AL 存结果
INC DX
MOV BX,OFFSET BUF1
OUT DX,AL 启动IN1通道
CALL DELAY
IN AL,DX 读取IN1通道转换结果
MOV [BX+SI],AL 存结果
INC DX
MOV BX,OFFSET BUF2
OUT DX,AL 启动IN2通道
CALL DELAY
IN AL,DX 读取IN2通道转换结果
MOV [BX+SI],AL 存结果
INC DX
MOV BX,OFFSET BUF3
OUT DX,AL 启动IN3通道
CALL DELAY
IN AL,DX 读取前码IN3通慧洞哪道转换结果
MOV [BX+SI],AL 存结果
INC DX
MOV BX,OFFSET BUF4
OUT DX,AL 启动IN4通道
CALL DELAY
IN AL,DX 读取IN4通道转换结果
MOV [BX+SI],AL 存结果
INC DX
MOV BX,OFFSET BUF5
OUT DX,AL 启动IN5通道
CALL DELAY
IN AL,DX 读取IN5通道转换结果
MOV [BX+SI],AL 存结果
INC DX
MOV BX,OFFSET BUF6
OUT DX,AL 启动IN6通道
CALL DELAY
IN AL,DX 读取IN6通道转换结果
MOV [BX+SI],AL 存结果
INC DX
MOV BX,OFFSET BUF7
OUT DX,AL 启动IN7通道
CALL DELAY
IN AL,DX 读取IN7通道转换结果
MOV [BX+SI],AL 存结果
INC SI
LOOP AA 采集次数未到循环
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
基本设定是指原本出厂时设定的参数,随着车辆的使用会发生偏移。首选项和适应的作用是将这些更改的参数调整或恢复为计算机(即值)。不同的是,基本设定通常是监视对应的传感器,通过计算机命令驱动器工作,计算机自身自主地找到对应的数值。自适应是 *** 作员输入数值,电子控制单元被动地接收该数值,并根据该数值执行指令。例如,如果节气门随着车辆的使用而变脏,则发动机在怠速时节气门开度会变大。这是因为如果节气门体污染,在相同的开度下进气量会减少,不足以维持发动机的额定转速,节气门怠速开度会变大。清洗节流阀后,如果维持以前的大开度,会导致进气量增大、怠速上升等现象,可以使用机器基本设定节流阀,通过电子控制单元的学习功能适应这一变化,满足怠速的需要例如,基本设定的指令01-04-060、01为发动机控制单元的地址代码,04为基本设定的功能代码,060为通道编号。01-04-060通过VAS5052告知发动机控制单元进行通道号060的基本设置,系统按照程序执行基本设置 *** 作,为节气门单元供电,到达上止点,即最大和最小位置然后,当节气门位置传感器(TPS)将与这些位置对应的电压值反馈给发动机ECU时,ECU知道与节气门全行程对应的电压范围,因此在运转时需要打开到某个角度,迅速准确地打开到该位置基本的设定方法如下。发动机01-发动机配置通道001电子节气门(节气门体自适应)介绍节气门自适应,并等待直到显示“匹配自适应:正常调节”。通路002质量空气流量传感器检测发动机运转G28(怠速)、暖机。通路003EGR(EGR)点火开关接通,发动机起动(怠速),踩下并保持制动踏板和油门踏板,EGR(EGR)EGR交替接通和断开的“EGRON”和“EGROFF”通道008真空泵测试(短距离)关闭发动机、点火开关打开旁誉、换档杆:踏好P/N档、制动踏板。通路011冲压控制点火开关接通,发动机起动(怠速),踩刹车踏板和油门踏板保持,气压控制0N和OFF交替进行的“激活”和“关闭”之差至少为80.0mbar一旦牢牢踩下通道028点火(爆震传则唤感器测试----短距离)制动踏板和阻尼踏板,发动机转速将自动增加到2200rpm。通路034氧传感器控制(老化检测:气缸组1、传感器1)说明:牢牢踩下制动踏板和阻尼踏板后,发动机转速自动增加到2200r/min。说明通道035氧传感器控制(老化检测,气缸组2,传感器1)牢牢踩下制动踏板和阻尼踏板后,发动机转速自动增加到2200r/min。说明通路036氧传感器控制(传感器准备就绪———催化转换器后)牢牢踩下运盯段制动踏板和阻尼踏板后,发动机转速自动上升到2200r/min。通道037氧传感器控制(氧传感器变化量,气缸组1)说明:踩稳制动踏板和阻尼踏板一次,发动机转速自动增加到2200r/min。通道038氧传感器控制(氧传感器变化量,气缸组2)说明:踩稳制动踏板和阻尼踏板一次,发动机转速自动增加到2200r/min。通道039氧传感器控制(更换传感器)说明:踩紧制动踏板和阻尼踏板后,发动机转速自动增加到2200r/min。通路043氧传感器控制(老化检测:气缸组1、传感器2)说明:牢牢踩下制动踏板和阻尼踏板后,发动机转速自动增加到2200r/min。通道044氧传感器控制(老化检测:气缸组2、传感器2)说明:踩稳制动踏板和风门踏板一次,发动机转速自动增加到2200r/min。通路046氧传感器控制(催化转换测试,气缸组1)说明:短距离行驶时,034/035/036/037/038/039/043/044必须“OK”,只有一次制动踏板和阻尼踏板通路047氧传感器控制(催化转换测试,气缸组2)说明:短距离行驶时,034/035/036/037/038/039/043/044必须“OK”,只有一次制动踏板和阻尼踏板通道048氧传感器控制(催化转化器热诊断,气缸排1)说明:踩稳制动踏板和风门踏板一次。通道060电子节气门(节气门自适应)说明:等待直到显示“节气门自适应”调节正常。通道063电子节气门(适用于强制降档开关)说明:踩油门踏板到底。通道070减排(EVAP阀门测试)说明:等待显示“确定”。通道071减排(泄漏诊断系统)说明:等待显示“确定”。通道074废弃回收(EGR)阀对齐说明:等待显示“确定”。通道075减排(废弃回收)说明:等待“确定”的标识。通路077减排(二次空气喷射、气缸列1)说明:等待“OK”的显示。通道078减排(二次空气喷射、气缸排2)说明:短距离行驶的034/035必须“OK”,牢牢踩下制动踏板和油门踏板一次,发动机转速自动增加到1400r/min。注意:每次发动机启动只能执行一次。通道094进气凸轮轴调节说明:短行程034/035必须“OK”,牢牢踩下制动踏板和油门踏板一次,发动机转速自动增加到1400r/min。注意:每次发动机启动只能运行一次。通道096凸轮轴调整(排气)说明:踩紧制动踏板和油门踏板后,发动机转速自动增加到2200r/min。通道098电子节气门(节气门体自适应)说明:等待显示“节气门自适应”调节正常。通道099氧传感器控制断路说明:等待显示“OK”。通路103燃料喷射(油泵自适应)说明:等待显示“OK”。通路107燃料喷射(燃料供给系统)说明:等待显示“OK”。通道130发动机冷却(电子冷却系统)说明:等待显示“确定”。通路140燃料供给系统(燃料压力下降)说明:初始化“低压水平”。通道142燃油供应系统(进气通道风门适应,气缸排1)说明:等待显示“确定”。通道145废弃温度传感器测试说明:等待显示“确定”。通路146NOx存储催化剂、气缸列1说明:等待表示为"OK"通路148的脱硫NOx存储催化剂,气缸列1说明:等待表示为"OK"的通路152的NOx传感器的偏移说明,等待表示为"OK"的通路190的氧传感器控制(劣化检测传感器3)说明:踩稳制动踏板和油门踏板一次,发动机转速自动上升通道191泄漏诊断,第二次空气喷射说明:"确定'.通道200准备代码(自动"车辆下划线"检测))为制动踏板和油门踏板通路238燃料喷射(油泵适应)说明)等待显示)OK)通路243燃料泵排列说明)等待显示)OK)自动变速器通路000强制降档适应说明)踩油门踏板直到强制降档保持3s。防抱死制动通道000制动泵排气说明:“激活”基础设定、状态和说明。通道001转向角传感器(G85)对准解释:用“40168”登录/编码-,基础设定为“激活”。启用通道003系统功能测试说明:“启用”基础设置。通道040纵向加速度传感器关闭(g251)说明:“活动”基础设置。通道042胎压监测系统(TPMS)复位解释:复位状态。通道060转向角度传感器调整(G85)说明:用“40168”注册/编码-,基础设置为“激活”。通道061的转速、横向、纵向加速度传感器的调整(G200/G202/G251)说明:用“40168”登录/编码-,使基础设定为“激活”。通道063横向加速度传感器调整(G200)说明:在“40168”中注册/编码-,使基础设置为“激活”。通道066制动压力传感器调整(G201)说明:在“40168”中登录/编码-,使基础设定为“激活”。通道068转速传感器调整(G202)说明:用“40168”注册/编码-,基础设置为“激活”。通道069纵向加速度传感器(G251)说明:用“40168”注册/编码-,基础设置为“激活”。通道093电子稳定系统(esp)解释:运行测试初始化。自动空调通道000风门电机位置自适应解释:“激活”基础设置。通道001阻尼电机基础设置解释:“主动”基础设置。停车制动通道005打开后部停车制动器,更换垫片进行说明。设定为有效。关闭通道006后部停车制动说明:激活设定。打开通道007后部停车制动器维护说明:使设定有效。通道010停车制动功能测试解释:启用设定。通道020纵向加速度传感器调整(G251)说明:激活设置。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)