我试图找到轮廓并从原始图像中获取裁剪的图像。
然后,我尝试从裁剪后的图像中获取像素值。
到目前为止,我能够像下面发布的那样从原始图像中提取特定图像。
这是我如何提取它的代码。
cv::Mat frame, copyimg;
cv::Mat star = cv::imread("C:\\Users\\PC\\Desktop\\star\\starcircle.png");
cv::cvtColor(star, frame, CV_BGR2HSV);
cv::inRange(frame, cv::Scalar(20, 100, 100), cv::Scalar(30, 255, 255), frame);
copyimg = (frame.size(), CV_8UC3, cv::Scalar(0));
cv::add(star, cv::Scalar(0), copyimg, frame);
cv::imshow("Converted image", frame);
cv::imshow("Original image", star);
cv::imshow("Copy", copyimg);
我能够像
那样修剪黄色部分但是,当我获得此图像并尝试使用下面的代码从黄色部分获取像素值时,它会读出转换后图像的所有像素。
换句话说,它给出了整个像素的RGB值,而不是图像的裁剪后的黄色部分。
这是从图像中获取像素值的代码。
int hei = copyimg.rows;
int wid = copyimg.cols;
int corow = hei * wid;
double b, g, r = 0.0;
for (int x = 0; x < hei; x++) {
for (int y = 0; y < wid; y++) {
b += copyimg.at<Vec3b>(x, y)[0];
g += copyimg.at<Vec3b>(x, y)[1];
r += copyimg.at<Vec3b>(x, y)[2];
}
}
cout << "$$ Red(R), Green(G), Blue(B) $$" << " \n\n";
cout << "avg_R: " << r / corow << " \n"; // red value
cout << "avg_G: " << g / corow << " \n"; // green value
cout << "avg_B: " << b / corow << " \n\n"; // blue value
因此,我希望将这两个代码结合起来,并从轮廓图像中获得像素值(仅黄色部分)。
请帮我解决这个问题。
谢谢。