[问题] Opencv Cam影像颜色过滤后叠加的问题

楼主: spidermomo (( ̄︿ ̄)很好= =)   2019-05-09 14:48:37
开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
Opencv 3.1
问题(Question):
我利用inRange方式来过滤cam影像成功后,想要在此影像上绘制有颜色的正方形,
但是却失败
喂入的资料(Input):
预期的正确结果(Expected Output):
使用inRange方式过滤影像后,并在此影像上出现有颜色的正方形
错误结果(Wrong Output):
连同正方形也变成被过滤后的影像#include <cstdio>
#include <cv.h>
#include <highgui.h>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
VideoCapture cam;
cam.open(1);
cam.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));
cam.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cam.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
namedWindow("result", WINDOW_AUTOSIZE);
while(1) {
Mat frame;
cam.read(frame);
if (frame.empty())
break;
Mat srcImage;
srcImage = frame.clone();
Mat hsvImage;
cvtColor(srcImage , hsvImage, CV_BGR2HSV);
Mat hsvThresholdImage;
inRange(hsvImage, Scalar(0, 0, 15), Scalar(360, 255, 175),
hsvThresholdImage);
Mat reszeImg;
cv::resize(hsvThresholdImage, reszeImg,
cv::Size(hsvThresholdImage.cols*2, hsvThresholdImage.rows * 2));
cv::rectangle(reszeImg, cv::Point(150, 40), cv::Point(250, 140),
Scalar(255, 0, 0), -1);
imshow("result", reszeImg);
waitKey(50);
}
destroyWindow("result");
}
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
作者: nh60211as   2019-05-09 15:27:00
你的hsvThresholdImage经过inRange格式变成8UC1,所以出来的影像包括reszeImg都变黑白的
楼主: spidermomo (( ̄︿ ̄)很好= =)   2019-05-09 15:54:00
谢谢~我改成在cv::rectangle前一行加上cv::cvtColor(reszeImg, reszeImg, CV_GRAY2BGR);就可以了,不知道这样方式正不正确
作者: nh60211as   2019-05-09 16:01:00
应该可以啦,opencv最麻烦的就是生出来的矩阵型别要自己看

Links booklink

Contact Us: admin [ a t ] ucptt.com