显示像素值已更改的图像openCV 我是OpenCV和C++的新手。我想更改我加载的图像的像素值,并在另一个窗口中显示新图像,以比较结果(仅在视觉上)。然而,当我运行代码时,我得到了两个原始图像。这意味着要么我的for循环没有执行它应该执行的操作(我对此表示怀疑,因为它对我来说有意义),要么像素值丢失,并且没有保存以显示新图像。我读过之前的一篇文章,上面说我应该在处理每个像素后将这句话加入到修改后的图像中。语句是:img.at(点(x,y))=color
谁能告诉我我做错了什么 多谢各位显示像素值已更改的图像openCV 我是OpenCV和C++的新手。我想更改我加载的图像的像素值,并在另一个窗口中显示新图像,以比较结果(仅在视觉上)。然而,当我运行代码时,我得到了两个原始图像。这意味着要么我的for循环没有执行它应该执行的操作(我对此表示怀疑,因为它对我来说有意义),要么像素值丢失,并且没有保存以显示新图像。我读过之前的一篇文章,上面说我应该在处理每个像素后将这句话加入到修改后的图像中。语句是:img.at(点(x,y))=color,c++,opencv,C++,Opencv,谁能告诉我我做错了什么 多谢各位 cv::Mat img = cv::imread("12.jpg", CV_LOAD_IMAGE_COLOR); // start of pixel navigation Mat navigateImage(Mat) { for(int x = 0; x > img.rows; x++) { for(int y = 0; y > img.cols; y++){
cv::Mat img = cv::imread("12.jpg", CV_LOAD_IMAGE_COLOR);
// start of pixel navigation
Mat navigateImage(Mat) {
for(int x = 0; x > img.rows; x++)
{
for(int y = 0; y > img.cols; y++){
Vec3b color = img.at<Vec3b>(Point(x,y));
if ( color[0] > 10 && color [1] > 10 && color[2]> 10 )
{
color[0] = 0 ;
color[1] = 0;
color[2] = 0;
img.at<Vec3b>(Point(x,y)) = color;
}
else
{
color.val[0] = 255 ;
color.val[1] = 255;
color.val[2] = 255;
img.at<Vec3b>(Point(x,y)) = color;
}
}
}
return img;
}
// end of pixel navigation
int main( int argc, char** argv )
{
if(! img.data){
cout << "could not open or find the image" << endl;
return -1;}
Mat newImage = navigateImage(img);
cv::imshow( " Original", img);
cv::imshow( " Altered ", newImage);
cv::waitKey(0);
return 0;
}
cv::Mat img=cv::imread(“12.jpg”,cv\u LOAD\u IMAGE\u COLOR);
//开始像素导航
Mat导航图像(Mat){
对于(int x=0;x>img.rows;x++)
{
对于(int y=0;y>img.cols;y++){
Vec3b color=img.在(x,y)点处;
如果(颜色[0]>10&&color[1]>10&&color[2]>10)
{
颜色[0]=0;
颜色[1]=0;
颜色[2]=0;
(点(x,y))处的img=颜色;
}
其他的
{
color.val[0]=255;
color.val[1]=255;
color.val[2]=255;
(点(x,y))处的img=颜色;
}
}
}
返回img;
}
//像素导航结束
int main(int argc,字符**argv)
{
如果(!img.data){
cout(1)。首先
for(int x = 0; x > img.rows; x++)
及
应该是
for(int x = 0; x < img.cols; x++)
Mat navigateImage(Mat img)
应该是
for(int x = 0; x < img.cols; x++)
Mat navigateImage(Mat img)
(3)。第三,把
cv::Mat img = cv::imread("12.jpg", CV_LOAD_IMAGE_COLOR);
在main
功能中
(4)。最后,
取代
借
否则,两个图像将是相同的
已更正的代码-
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
// start of pixel navigation
Mat navigateImage(Mat img) {
for(int x = 0; x < img.cols; x++)
{
for(int y = 0; y < img.rows; y++){
Vec3b color = img.at<Vec3b>(Point(x,y));
if ( color[0] > 10 && color [1] > 10 && color[2]> 10 )
{
color[0] = 0 ;
color[1] = 0;
color[2] = 0;
img.at<Vec3b>(Point(x,y)) = color;
}
else
{
color.val[0] = 255 ;
color.val[1] = 255;
color.val[2] = 255;
img.at<Vec3b>(Point(x,y)) = color;
}
}
}
return img;
}
// end of pixel navigation
int main( int argc, char** argv )
{
Mat img = cv::imread("12.png", CV_LOAD_IMAGE_COLOR);
if(! img.data){
cout << "could not open or find the image" << endl;
return -1;
}
Mat newImage = navigateImage(img.clone());
cv::imshow( " Original", img);
cv::imshow( " Altered ", newImage);
cv::waitKey(0);
return 0;
}
#包括
#包括
使用名称空间cv;
使用名称空间std;
//开始像素导航
Mat导航图像(Mat img){
对于(int x=0;x10&&color[1]>10&&color[2]>10)
{
颜色[0]=0;
颜色[1]=0;
颜色[2]=0;
(点(x,y))处的img=颜色;
}
其他的
{
color.val[0]=255;
color.val[1]=255;
color.val[2]=255;
(点(x,y))处的img=颜色;
}
}
}
返回img;
}
//像素导航结束
int main(int argc,字符**argv)
{
Mat img=cv::imread(“12.png”,cv\u LOAD\u IMAGE\u COLOR);
如果(!img.data){
非常感谢,我实际上刚刚注意到了这一点。是的,这完全没有意义。现在我从编译器那里得到一个错误,它表明内存没有被正确访问。访问冲突读取位置非常感谢,现在我了解了这件事的实际工作原理。我想访问冲突读取错误来自我的IDE。我有我知道如何绕过它。太棒了!它就像一个符咒,只是为了将来的引用。你知道访问冲突错误来自哪里吗?我真的不能说,不调试代码。但是,你可以执行调试。通常,当你试图访问存在的内存时,访问冲突就会发生,例如空引用。我已经为它添加了一个方法检测感兴趣的区域但我一直遇到相同的访问内存问题,我遵循了文档和您关于前面代码的建议。但是我一直收到访问冲突错误消息。收到这样的错误非常令人沮丧
Mat newImage = navigateImage();
Mat newImage = navigateImage(img.clone());
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
// start of pixel navigation
Mat navigateImage(Mat img) {
for(int x = 0; x < img.cols; x++)
{
for(int y = 0; y < img.rows; y++){
Vec3b color = img.at<Vec3b>(Point(x,y));
if ( color[0] > 10 && color [1] > 10 && color[2]> 10 )
{
color[0] = 0 ;
color[1] = 0;
color[2] = 0;
img.at<Vec3b>(Point(x,y)) = color;
}
else
{
color.val[0] = 255 ;
color.val[1] = 255;
color.val[2] = 255;
img.at<Vec3b>(Point(x,y)) = color;
}
}
}
return img;
}
// end of pixel navigation
int main( int argc, char** argv )
{
Mat img = cv::imread("12.png", CV_LOAD_IMAGE_COLOR);
if(! img.data){
cout << "could not open or find the image" << endl;
return -1;
}
Mat newImage = navigateImage(img.clone());
cv::imshow( " Original", img);
cv::imshow( " Altered ", newImage);
cv::waitKey(0);
return 0;
}