我们如何在opencv中制作晕影过滤器?我们需要为它实现任何算法还是仅使用BGR的值?我们如何制作这种类型的过滤器.我在这里看到了它的实现,但我没有清楚地理解它.任何拥有完整算法指导和实施指南的人都非常高兴.
之后Abid rehman K
回答我在C试过这种++
int main()
{
Mat v;
Mat img = imread ("D:\\2.jpg");
img.convertTo(v, CV_32F);
Mat a,b,c,d,e;
c.create(img.rows,img.cols,CV_32F);
d.create(img.rows,img.cols,CV_32F);
e.create(img.rows,img.cols,CV_32F);
a = getGaussianKernel(img.cols,300,CV_32F);
b = getGaussianKernel(img.rows,300,CV_32F);
c = b*a.t();
double minVal;
double maxVal;
cv::minMaxLoc(c, &minVal, &maxVal);
d = c/maxVal;
e = v*d ; // This line causing error
imshow ("venyiet" , e);
cvWaitKey();
}
Run Code Online (Sandbox Code Playgroud)
d
显示正确,但e=v*d
行导致运行时错误
OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1 || type ==
CV_64FC1 …
Run Code Online (Sandbox Code Playgroud) 这是我从网络资源中读取的定义
第一是
Midtone: Situated between the darkest tone (Black), and the brightest tone (White). For a 24 bit colour image, this occurs when Red = Green = Blue = 128.
另一个是
Tones created by dots between 30% and 70% of coverage
Run Code Online (Sandbox Code Playgroud)
和
Midtone also refers to the range of colors that aren't mixed with black (the shadows) or white (the highlights).
我从这些定义得到的是,值为0或255的像素我们应该将它们调整为128.我的定义是正确的吗?根据我的知识,我不想使用直方图均衡的方法,它也用于图像的亮度
我想执行下面的功能,就像我想要执行此功能OpenCV C++
但我不知道如何处理Midtones和CYMK值,因为它同时具有RGB和CMYK
例如样品图像
应用上述值后
我想在OpenCV中做同样的事情
如果我们只用RGB执行此操作,我的关注点就是结果
编辑
安德烈的回答很好但仍在等待最佳答案,因为其他图像很难调整其他图像的其他颜色平衡值
我正在使用SVM来预测投资回报率,我训练了SVM,现在处于测试阶段,它为我提供带有1和0形式的标签的输出。
我正在尝试,如果SVM预测1
平均图像包含眉毛,现在我希望它应该在眉毛周围为矩形,因为算法是基于眉毛进行预测的。我怎样才能做到这一点?以下是我用于预测的代码。
h_og = cv2.HOGDescriptor()
histogram = h_og.compute(photo)
arr.append(histogram)
arr = np.float32(arr)
result = svm.predict(arr)
Run Code Online (Sandbox Code Playgroud)
现在结果是数字或标签的形式。如何在测试图像的投资回报率上绘制矩形。
Positive data: image with eyebrows
Negative data: images not containing eyebrow
Testing data: Full face of the person
Run Code Online (Sandbox Code Playgroud)
如果必须使用detectMultiScale()
它,则如何将其与上述逻辑一起使用。
将代码用于培训目的
sam = []
lab = []
# Get positive samples
for filename in glob.glob('D:\*.png'):
im = cv2.imread(filename, 1)
h_og = cv2.HOGDescriptor()
hist = h_og.compute(im)
sam.append(hist)
lab.append(1)
# Get negative samples
for file in glob.glob('D:\\*.png'):
im = cv2.imread(file, 1)
im = …
Run Code Online (Sandbox Code Playgroud) 我想只计算此图像的晕影区域,就像我在这里有图像一样
我如何仅在应用了小插图的区域中计算或迭代/通过并离开其他区域?我只想在应用晕影的区域上应用算法,我试着将标量设置为红色并提取出发现红色的区域,但是它不起作用就像没有给出结果,因为当朝向中心时颜色变浅图像.
的晕影变暗通过用下面的掩码图像强度乘以角落和边缘:
这是原始图像在这里
我想blending overlay
在**only vignette part of** vignette image
与original image
这是我的混合叠加代码
void blending_overlay(Mat& img1 , Mat& img2 , Mat& out)
{
Mat result(img1.size(), CV_32FC3);
for(int i = 0; i < img1.size().height; ++i){
for(int j = 0; j < img1.size().width; ++j){
for (int c=0 ; c<img1.channels();c++){
float target = (float)img1.at<uchar>(i, 3*j+c)/255. ;
float blend = (float)img2.at<uchar>(i, 3*j+c)/255. ;
if(target > 0.5){
result.at<float>(i, 3*j+c) = ((1 - (1-2*(target-0.5)) * (1-blend))); …
Run Code Online (Sandbox Code Playgroud) 我正在使用这种native
方法,但我希望图像作为输入而不是帧,当我运行此代码时,它不运行相机,这是我的java代码
public class CvNativeActivity extends Activity implements CvCameraViewListener2
{
private CameraBridgeViewBase mOpenCvCameraView;
public native int convertNativeGray(int n);
private final static String TAG = "CvNativeActivity";
public native int convertNativeGray(long matAddrRgba, long matAddrGray);
private Mat mRgba;
private Mat mGray;
// other part
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this)
{
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
System.loadLibrary("native_activity");// Load Native module
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
}; …
Run Code Online (Sandbox Code Playgroud) 我刚开帐户Admob
,我想整合我的应用程序,但我不明白它是如何付给我的?我发现我需要在哪里输入我的账户信息才能收到款项,但没有任何好的帮助,任何使用经验,请帮助我,关于你的经验
我试图保存BOW算法中的词汇表.以下是我的代码.
FileStorage fs;
fs.open("Vocabulary.xml", FileStorage::WRITE);
Mat vocabulary = bow.cluster();
fs << vocabulary ;
fs.release();
FileStorage fs2;
fs2.open("Vocabulary.xml", FileStorage::READ);
fs2 ["Vocabulary"] >> vocabulary ;
dextract.setVocabulary(vocabulary);
cv::Mat training_mat(num_img , dictionarySize,CV_32FC1);
cv::Mat labels(num_img,1,CV_32FC1);
CvSVM svm;
svm.load( "trainsvm.xml" );
Run Code Online (Sandbox Code Playgroud)
这是我的错误:
OpenCV Error: Unspecified error (No element name has been given) in unknown function , file c:\opencv\2.4.4\build\include\opencv2\core\operations.hpp , line 2908
Run Code Online (Sandbox Code Playgroud) 我想绘制curve
控制点,以便我可以移动曲线来改变颜色,下面是代码,从一个非常好解释的答案获得帮助
const int N=5; // number of control points (must be >= 4)
float ctrl[N]= // control points y values initiated with linear function y=x
{ // x value is index*1.0/(N-1)
0.00,
0.25,
0.50,
0.75,
1.00,
};
float correction(float col,float *ctrl,int n)
{
float di=1.0/float(n-1);
int i0,i1,i2,i3;
float t,tt,ttt;
float a0,a1,a2,a3,d1,d2;
// find start control point
col*=float(n-1);
i1=col; col-=i1;
i0=i1-1;
i2=i1+1; if (i2>=n) i2=n-1;
i3=i1+2;
// compute interpolation coefficients
if (i0>=0) d1=0.5*(ctrl[i2]-ctrl[i0]); else d1=ctrl[i2]-ctrl[i1];
if (i3< …
Run Code Online (Sandbox Code Playgroud) 我正在尝试显示此图像,因为我在我的目录中有此图像
但我用这段代码显示它
Mat img=imread("D:\\vig.png");
imshow("image",img);
waitKey();
imwrite("D:\\img.jpg",img);
Run Code Online (Sandbox Code Playgroud)
相同的图像显示如下
它出什么问题了
我想在下面的代码中混合2个图像
Mat input = imread ("E:\\img1.jpg");
Mat image;
Mat img12=imread("D:\\vig.png",-1); // load 'as is', don't convert to bgr !!
Mat ch[4];
split(img12,ch);
Mat im2 = ch[3]; // here's the vignette
im2 = 255 - im2;
im2.convertTo(im2 , input.type());
resize(im2,image,Size(input.rows,input.cols));
blending_overlay(image , input , image);
imshow ("image",image);
waitKey();
Run Code Online (Sandbox Code Playgroud)
img12上的不同操作是因为它的形状,代码给我的运行时错误
我的文本文件包含
Wew213
Wew214
Wew215
Run Code Online (Sandbox Code Playgroud)
我在程序中的输入是
Wew213
Run Code Online (Sandbox Code Playgroud)
但它告诉我输出
"Not Matched"
Run Code Online (Sandbox Code Playgroud)
实际上我正在做的是我想输入输入,如果输入匹配文本文件中的数字,它应该通过if语句运行输出否则语句
这是我的计划
char file_data[10];
std::ifstream file_read ("D:\\myfile.txt");
cout<<"Enter the number to search"<<endl;
char val[10];
cin>>val;
while(!file_read.eof())
{
file_read>>file_data;
cout<<file_data<<endl;
}
if (val == file_data)
{
cout<<"Matched"<<endl;
}
else
{
cout<<"Not Matched"<<endl;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Java中反转完整字符串
例如,Good morning
因此输出应返回morning good
。
我尝试了以下功能
public static String reverse(String s)
{
if (s.isEmpty())
return s;
//int n = 0;
return reverse(s.substring(1)) + s.charAt(0);
}
Run Code Online (Sandbox Code Playgroud)
但是上述功能正在转换good morning
为gninrom doog
。我的代码适用于每个字符,如何使其适用于文字。任何提示或指南/解释将不胜感激。
我已经去过这个问题,但没有解决我的问题
更新:
在@snr答案和@NathanHughes注释的帮助下尝试以下代码
public static String reverse(String s)
{
int s1 = s.indexOf(" ");
if (s1 != -1)
{
return reverse(s.substring(s1+1)) + s.substring(0,s1);
}
else
{
return "-1";
}
}
Run Code Online (Sandbox Code Playgroud)
但是输出是
-1good
Run Code Online (Sandbox Code Playgroud)