求一个关于openCV的作业答案,有报酬。

1.利用opencv分别生成3507*2480的蓝(B170,G91,R4)、绿(B126,G162,R73)、红(B32,G23,R228)图片各一张。
2.利用opencv识别以上三张图片上的颜色,识别到蓝色返回B,绿色返回G,红色返回R。

2个回答

int main(int agrc, char *argv[])
{

cv::Size SrcImgSize(3507, 2480);
cv::Mat BlueImg(SrcImgSize, CV_8UC3, cv::Scalar(170, 91, 4));
cv::Mat GreenImg(SrcImgSize, CV_8UC3, cv::Scalar(126, 162, 73));
cv::Mat RedImg(SrcImgSize, CV_8UC3, cv::Scalar(32, 23, 228));
cv::imwrite("Blue.png", BlueImg);
cv::imwrite("Green.png", GreenImg);
cv::imwrite("Red.png", RedImg);
// recognition
cv::Mat testImg;
testImg = cv::imread("Red.png");

if (testImg.at<cv::Vec3b>(0, 0)[0] == 170 && testImg.at<cv::Vec3b>(0, 0)[1] == 91 && testImg.at<cv::Vec3b>(0, 0)[2] == 4)
{
    std::cout << "Blue" << std::endl;
}
if (testImg.at<cv::Vec3b>(0, 0)[0] == 126 && testImg.at<cv::Vec3b>(0, 0)[1] == 162 && testImg.at<cv::Vec3b>(0, 0)[2] == 73)
{
    std::cout << "green" << std::endl;
}
if (testImg.at<cv::Vec3b>(0, 0)[0] == 32 && testImg.at<cv::Vec3b>(0, 0)[1] == 23 && testImg.at<cv::Vec3b>(0, 0)[2] == 228)
{
    std::cout << "red" << std::endl;
}

system("pause");

}

不知道你的具体要求,就按最简单的写了.

太感谢你了呀,以后可以有更多的交流指导嘛!

tangxiaoren
tangxiaoren 不客气,指导烫不伤,我们多交流
大约 2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问