本文主要是介绍彩色图像和灰色图像在一个窗口下显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前面写了多张彩色图像或者多张单通道图像在一个窗口下显示,有时候需要彩色图像和黑白图像同事显示,方便对比。
以下即彩色图像和灰色图像在一个窗口下显示的代码:
现在在做项目是芯片检测。
#include <opencv2/opencv.hpp>
#include <highgui.h>
#include <cv.h>
#include <cxcore.h>
#include <iostream>
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <stdarg.h>
#include <time.h>
//========函数CombineImage(): 3通道和单通道图像合并 ======
IplImage *CombineImage(IplImage *rgbImg, IplImage *greyImg)
{
if (rgbImg == NULL || greyImg == NULL)
return NULL;
int width = rgbImg->width;
int height = rgbImg->height;
IplImage *combImg = cvCreateImage(cvSize(width * 2, height), 8, 3);
IplImage *cvtImg = cvCreateImage(cvSize(width, height), 8, 3);
cvCvtColor(greyImg, cvtImg, CV_GRAY2BGR);
for (int row = 0; row < combImg->height; row++)
{
for (int col = 0; col < combImg->width; col++)
{
if (col < width)
{
CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col) = CV_IMAGE_ELEM(rgbImg, unsigned char, row, 3 * col);
CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 1) = CV_IMAGE_ELEM(rgbImg, unsigned char, row, 3 * col + 1);
CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 2) = CV_IMAGE_ELEM(rgbImg, unsigned char, row, 3 * col+ 2);
}
else
{
CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col) = CV_IMAGE_ELEM(cvtImg, unsigned char, row, 3 * (col-width));
CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 1) = CV_IMAGE_ELEM(cvtImg, unsigned char, row, 3 * (col - width) + 1);
CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 2) = CV_IMAGE_ELEM(cvtImg, unsigned char, row, 3 * (col - width) + 2);
}
}
}
cvReleaseImage(&cvtImg);
return combImg;
}
//================================== 主函数 =======================================
int main(int argc,char** argv)
{
//加载原始彩色图片
IplImage* src_image = cvLoadImage("F:\\image\\贴片.jpg",
CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if (src_image == NULL) return -1;
//平滑
IplImage* smooth_image = cvCreateImage(cvGetSize(src_image),IPL_DEPTH_8U,3);
cvSmooth(src_image,smooth_image,CV_MEDIAN /*CV_GAUSSIAN CV_BILATERAL*/,5,5,0,0);//CV_MEDIAN CV_BILATERAL
//灰度化
IplImage* gray_image = cvCreateImage(cvGetSize(smooth_image),IPL_DEPTH_8U,1);
cvCvtColor(smooth_image,gray_image,CV_RGB2GRAY);
//二值化转化成黑白图像
IplImage* canny_image = cvCreateImage(cvGetSize(gray_image),IPL_DEPTH_8U,1);
cvThreshold(gray_image,canny_image, 140, 255, CV_THRESH_BINARY);
//一张3通道和一张单通道图像合并
IplImage *combImg = CombineImage(src_image,canny_image); //图像合并函数
cvNamedWindow("CombineImage",1);
cvResizeWindow("CombineImage",700,660);
cvShowImage( "CombineImage", combImg);
cvWaitKey();
cvReleaseImage(&combImg);
cvDestroyWindow("CombineImage");
cvReleaseImage(&filter_image);
return 0;
}
//左侧是原彩色图,右边是二值化后的图像:
这篇关于彩色图像和灰色图像在一个窗口下显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!