Opencv 从C+中的R、G、B像素生成图像+;
我有以下代码:Opencv 从C+中的R、G、B像素生成图像+;,opencv,Opencv,我有以下代码: double R = (double)(img->imageData + img->widthStep*i)[j*3]; double G = (double)(img->imageData + img->widthStep*i)[j*3+1]; double B = (double)(img->imageData + img->widthStep*i)[j*3+2]; 然后我给R,G,B设置了一些条件。 现在我想在C++中
double R = (double)(img->imageData + img->widthStep*i)[j*3];
double G = (double)(img->imageData + img->widthStep*i)[j*3+1];
double B = (double)(img->imageData + img->widthStep*i)[j*3+2];
然后我给R,G,B设置了一些条件。
现在我想在C++中从新的像素值R,G,B生成新的图像。
非常感谢你的帮助 您好,您应该看看:
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int ac, char **av){
cv::Mat src = cv::Mat(Size(1920, 1080), CV_8UC3, Scalar(0, 0, 0));
std::vector<cv::Mat> rgbChannels;
cv::cvtColor(src.clone(), src, CV_BGR2RGB);
cv::split(src, rgbChannels);
cv::Mat r = rgbChannels.at(0);
cv::Mat g = rgbChannels.at(1);
cv::Mat b = rgbChannels.at(2);
unsigned char max1, max2, min1, min2, R=0,G=0,B=0;
for (unsigned int y =0; y < r.rows; y++){
for (unsigned int x =0; x < r.cols; x++){
max1= (R>G)? R:G;
max2 = (max1>B)? max1:B;
min1= (R<G)? R:G;
min2 = (min1<B)? min1:B;
if( R>95 && G>40 && B> 20 && (max2-min2)>15 && (R-G)>15 && R>G && R>B) {
r.at<uchar>(y, x)=R;
g.at<uchar>(y, x)=G;
b.at<uchar>(y, x)=B;
}
}
}
rgbChannels.clear();
rgbChannels.push_back(r);
rgbChannels.push_back(g);
rgbChannels.push_back(b);
cv::Mat RGBoutput;
cv::merge(rgbChannels, RGBoutput);
cv::imwrite("output.png", RGBoutput);
return 0;
}
#包括“opencv2/opencv.hpp”
使用名称空间cv;
内部主(内部ac,字符**av){
cv::Mat src=cv::Mat(尺寸(19201080),cv_8UC3,标量(0,0,0));
std::矢量RGB通道;
cv::cvtColor(src.clone(),src,cv_BGR2RGB);
cv::分割(src、RGB通道);
cv::Mat r=rgbChannel.at(0);
cv::Mat g=rgbChannel.at(1);
cv::Mat b=RGB通道,位于(2);
无符号字符max1,max2,min1,min2,R=0,G=0,B=0;
for(无符号整数y=0;yG)?R:G;
max2=(max1>B)?max1:B;
min1=(R40&&B>20&&(max2-min2)>15&&&(R-G)>15&&R>G&&R>B){
r、 at(y,x)=r;
g、 at(y,x)=g;
b、 at(y,x)=b;
}
}
}
rgbcchannels.clear();
RGB通道。推回(r);
RGB通道。推回(g);
RGB通道。推回(b);
cv::Mat RGBoutput;
合并(RGB通道,RGBoutput);
cv::imwrite(“output.png”,RGBoutput);
返回0;
}
顺便说一下,如果您想对颜色进行操作,您应该查看HSV颜色空间以获得更精确的结果。Hi。非常感谢你的回答。但在本例中,我希望显示来自摄影机的图像,然后更改一些值(R、G、B),并将这些像素设置为从摄影机接收的当前图像。我该怎么做呢?使用视频捕获和我给你的一段代码修改你的帧,并对修改后的帧进行cv::imshow。(在此处查看视频捕获:)hii。我想从你的代码中检测皮肤区域a/s:r=rgb通道。在(0);g=在(1)处的RGB信道;b=在(2)处的RGB信道;无符号字符max1,max2,min1,min2,R=0,G=0,B=0;对于(无符号整数y=0;y