Я пытаюсь умножить два изображения разных моделей, в моем случае HSV и YCRCB.
Каждый раз, когда я получаю «вектор из связанной ошибки». Я проверил размеры умножаемых входных изображений, количество строк и столбцов. Я знаю, что значение превышает 255.
Я попытался реализовать этот метод opencv - image multiplication, но код имеет путь к множеству MAT, которые должны быть инициализированы. Это также заставляет меня задаться вопросом, можно ли умножать изображения с более чем одним каналом. Также попробовал прямое умножение, и он не работает, поэтому попытался умножить канал мудрый. Чтобы упростить задачу, я использовал метод loop, но затем произошла ошибка.Умножение 2 изображений, в которых изображения имеют разные модели в OPEN CV
Краткое описание кода и причины для этого: я использую его для обнаружения кожи, но хочу еще больше уменьшить шум. Я думаю, что это может быть сделано путем умножения двух выходных изображений, генерируемых пороговыми операциями (для HSV YCRCB). Поскольку эти изображения имеют разные шумы на изображении, выход умножения будет иметь еще меньший шум (я видел выход на разных экранах, перекрывающиеся области очень малы), следовательно, это может обнаруживать цвет кожи практически все время, и шум будет быть минимальным и, таким образом, поможет лучше отслеживать кожу.
Код, приведенный ниже, не является полным, поскольку он никогда не выполняется до конца. После этого выполняются морфологические и дилатационные операции, вот и все.
Это мой первый вопрос, связанный с переполнением стека, и я все еще изучаю Open CV. Извините Если я был чрезмерно описательным, и все предложения приветствуются. Спасибо.
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <iostream>
#include <opencv2\imgproc\imgproc.hpp>
using namespace cv;
using namespace std;
char key;
Mat image,hsv,ycr;
vector<Mat> channels,ycrs,threshold_output;
int main()
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
{
cout << "Cannot open the web cam" << endl;
return -1;
}
while(1)
{
cap>>image;
cvtColor(image, ycr, CV_BGR2YCrCb); //Converts into YCRCB
cvtColor(image, hsv, CV_BGR2HSV); //Converts into HSV
Mat imgThresholded;
Mat imgThresholded1;
inRange(ycr, Scalar(0, 140,105), Scalar(255, 165,135), imgThresholded1); //for yrcrcb range
inRange(hsv, Scalar(0, 48,150), Scalar(20, 150,255), imgThresholded); //for hsv range
split(imgThresholded1, channels);
split(imgThresholded, ycrs);
for(int i = 0; i <3 ; i++)
{
multiply(channels[i],ycrs[i], threshold_output[i], 1,-1);
}//code breaks here
Большое спасибо. – udit7395