按照如下转换公式利用opencv编写代码。 原图
转换公式
运行环境win10+opencv2.4.9+VS2015
#include "stdafx.h" #include<opencv2/opencv.hpp> #include<iostream> #include<math.h> #include<math.h> #include<complex> using namespace std; using namespace cv; Mat BGR2YCbCr(Mat img, Mat out) { int width = img.rows; int height = img.cols; //cv::Mat out = cv::Mat::zeros(height, width, CV_32F); for (int j = 0; j < width ; j++) { for (int i = 0; i < height; i++) { // Y out.at<cv::Vec3b>(j, i)[0] = (int)((float)img.at<cv::Vec3b>(j, i)[0] * 0.114 + (float)img.at<cv::Vec3b>(j, i)[1] * 0.5870 + (float)img.at<cv::Vec3b>(j, i)[2] * 0.299); // Cb out.at<cv::Vec3b>(j, i)[1] = (int)((float)img.at<cv::Vec3b>(j, i)[0] * 0.5 + (float)img.at<cv::Vec3b>(j, i)[1] * (-0.3323) + (float)img.at<cv::Vec3b>(j, i)[2] * (-0.1687) + 128); // Cr out.at<cv::Vec3b>(j, i)[2] = (int)((float)img.at<cv::Vec3b>(j, i)[0] * (-0.0813) + (float)img.at<cv::Vec3b>(j, i)[1] * (-0.4187) + (float)img.at<cv::Vec3b>(j, i)[2] * 0.5 + 128); } } return out; } int main() { Mat img = imread("2.jpg", cv::IMREAD_COLOR); imshow("齐宝宝", img); waitKey(0); int width = img.rows; int height = img.cols; /*Mat ycbcr = Mat::zeros(width,height, CV_32FC3);*/ /*cv::Mat out = cv::Mat::zeros(height, width, CV_8UC3);*/ Mat ycbcr = img.clone(); ycbcr = BGR2YCbCr(img, ycbcr); /*ycbcr = process(ycbcr);*/ imshow("转换后", ycbcr); waitKey(0); Mat Y,Cb,Cr; vector<Mat> Ychannel, Cbchannel, Crchannel, channels; split(ycbcr, channels); Mat Yimage = channels.at(0); Mat Cbimage= channels.at(1); Mat Crimage = channels.at(2); imshow("Yimg", Yimage); imshow("Cbimage", Cbimage); imshow("Crimage", Crimage); waitKey(0);
结果
转换后
Y通道
Cb通道
Cr通道
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算