我现在有用opencv得到的jpg格式的一帧图片,请问我怎么把图片改变为rgb格式?
发布网友
发布时间:2022-04-27 00:06
我来回答
共4个回答
热心网友
时间:2023-11-13 06:03
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img=imread("f:/1.jpg");
int height=img.rows;
int width=img.cols;
for(int i=0;i<height;i++)
{
unsigned char *data=img.data+i*width*img.channels();
for(int j=0;j<width;j++)
{
int r=*(data+j*img.channels());
int g=*(data+j*img.channels()+1);
int b=*(data+j*img.channels()+2);
cout<<r<<" "<<g<<" "<<b<<endl;
}
}
img.release();
system("pause");
return 1;
}
热心网友
时间:2023-11-13 06:03
推荐使用C++格式,比较方便使用
#include "WangSetup.h"
#include <iostream>
#include <cv.h>
#include <highgui.h>
using namespace std;
int main()
{
//C++ Format
cv::Mat img = cv::imread("lena.jpg");
//取img中(30, 20)这个像素点的bgr信息
cv::Vec3b bgr = img.at<cv::Vec3b>(30, 20);
cout << "B: " << (unsigned int)bgr.val[0] << ", ";
cout << "G: " << (unsigned int)bgr.val[1] << ", ";
cout << "R: " << (unsigned int)bgr.val[2] << endl;
//C Format
IplImage *img2 = cvLoadImage("lena.jpg");//8UC3, (0,0)B, (0,0)G, (0,0)R, (0,1)B, ...
char *ptr = img2->imageData//图像首地址
+ img2->widthStep * 30//每行大小 * 行数
+ 3 * 20;//BGR占3个大小空间 * 列数
printf("B: %d, G: %d, R: %d\n", (uchar)ptr[0], (uchar)ptr[1], (uchar)ptr[2]);
cvReleaseImage(&img2);
return 0;
}
追问我现在有了图像采集的代码了,得到的是一帧jpg格式的图片,我怎么在我源代码上用你的这个程序呢?
追答你应该有一个cv::Mat或者IplImage*去记录一个图像吧,如果要取里面某个位置的RGB值就像代码里一样取就行了
热心网友
时间:2023-11-13 06:04
CvScalar s;
s = cvGet2D(src, j,i);//获取src图像中坐标为(i,j)的像素点的值
s.val[0] 代表src图像BGR中的B通道的值~追问我是在保存图片的代码后面写这个函数就好了吗?最后得到的是什么?是在运行的框里会显示rbg的值吗?
追答你把得到的r g b 的值放到需要输出的地方就ok
热心网友
时间:2023-11-13 06:04
进去PS取色即可